Problem Statement
Android 17 (API 37) enforces per-app memory limits based on the device's total RAM. When an app exceeds its limit, the system terminates the process.
This is not a java.lang.OutOfMemoryError. No exception is thrown, no signal is raised, and no stack trace is produced — the process simply disappears. Neither UncaughtExceptionHandlerIntegration nor the NDK handler sees anything, so the SDK reports nothing at all.
Solution Brainstorm
AnrV2Integration already polls ActivityManager#getHistoricalProcessExitReasons() at startup and discards everything that isn't REASON_ANR. Memory-limiter kills show up in that same list as REASON_OTHER with getDescription() containing "MemoryLimiter:AnonSwap"
So using that same mechanism doesn't sound too challenging.
Problem Statement
Android 17 (API 37) enforces per-app memory limits based on the device's total RAM. When an app exceeds its limit, the system terminates the process.
This is not a
java.lang.OutOfMemoryError. No exception is thrown, no signal is raised, and no stack trace is produced — the process simply disappears. NeitherUncaughtExceptionHandlerIntegrationnor the NDK handler sees anything, so the SDK reports nothing at all.Solution Brainstorm
AnrV2Integration already polls ActivityManager#getHistoricalProcessExitReasons() at startup and discards everything that isn't REASON_ANR. Memory-limiter kills show up in that same list as REASON_OTHER with getDescription() containing "MemoryLimiter:AnonSwap"
So using that same mechanism doesn't sound too challenging.