2

We released an update of our app and got a near immediate set of AndroidDeadException crashes reported which continue to the present. These type of exceptions are not producing a lot of info, though we have tried to instrument the code to do that.

To date these crashes are 1) all involve Samsung Knox, 2) (duh) all Samsung devices, 3) a wide variety of Samsung devices (Galaxy S/A/Flip/Fold series), 4) 95% of crashes are occurring on Android 12 devices.

Our update was significant/larger and extended our existing app features to work profiles (Android For Work/Android Enterprise). The relevant part of the code is looking to get a list of apps on the device within a given profile and things break down with the bolded (**) line:

  override fun getAllUserProfileApps(): List<LauncherActivityInfo> {
    launcherActivityInfoCache = userCache.userProfiles.flatMap { userHandle ->
      **launcherApps.getActivityList(null, userHandle).also** { list ->
        if (BuildConfig.DEBUG) {
          list.joinToString("\n") { it.logToString() }
        }
      }
    }
    return launcherActivityInfoCache
  }

It's possibly too much to expect there is someone who has seen this exact thing and while we'd love that...it might be enough to know how to instrument this so we can get a better look and start to hunt it down, kill it.

A few strange things: as many crashes as we have gotten, not one user has contacted us, in any way, to complain; the crash report log often (but not always) shows/refers to our notification listener.

Here is the error as it comes to us in Crashlytics:

**KnoxHelper.java line 150
com.samsung.android.knox.KnoxHelper.getActivityList**

Stack Traces:

Fatal Exception: java.lang.RuntimeException
android.os.DeadSystemException

com.samsung.android.knox.KnoxHelper.getActivityList (KnoxHelper.java:150)
android.content.pm.LauncherApps.getActivityList (LauncherApps.java:732)
com.our.app.interactors.utils.AppsInstalledHelperImpl.getAllUserProfileApps (AppsInstalledHelper.kt:148)
com.our.app.interactors.SyncAllAppInfo$invoke$2.invokeSuspend (SyncAllAppInfo.kt:42)
com.our.app.interactors.SyncAllAppInfo$invoke$2.invoke (Unknown Source:8)
our.app.interactors.SyncAllAppInfo$invoke$2.invoke (Unknown Source:4)
kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn (Undispatched.kt:89)
kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext (Builders.common.kt:165)
kotlinx.coroutines.BuildersKt.withContext (Unknown Source:1)
com.our.app.interactors.SyncAllAppInfo.invoke (SyncAllAppInfo.kt:40)
com.our.app.LauncherAppsCallback$onPackageChanged$1.invokeSuspend (LauncherAppsCallback.kt:106)
kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:571)
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.kt:750)
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.kt:678)
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.kt:665)


Caused by android.os.DeadSystemException

com.samsung.android.knox.KnoxHelper.getActivityList (KnoxHelper.java:150)
android.content.pm.LauncherApps.getActivityList (LauncherApps.java:732)
com.our.app.interactors.utils.AppsInstalledHelperImpl.getAllUserProfileApps (AppsInstalledHelper.kt:148)
com.our.app.interactors.SyncAllAppInfo$invoke$2.invokeSuspend (SyncAllAppInfo.kt:42)
com.our.app.interactors.SyncAllAppInfo$invoke$2.invoke (Unknown Source:8)
com.our.app.interactors.SyncAllAppInfo$invoke$2.invoke (Unknown Source:4)
kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn (Undispatched.kt:89)
kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext (Builders.common.kt:165)
kotlinx.coroutines.BuildersKt.withContext (Unknown Source:1)
com.our.app.interactors.SyncAllAppInfo.invoke (SyncAllAppInfo.kt:40)
com.our.app.LauncherAppsCallback$onPackageChanged$1.invokeSuspend (LauncherAppsCallback.kt:106)
kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:571)
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.kt:750)
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.kt:678)
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.kt:665)
Joel Butler
  • 240
  • 3
  • 15
  • 1
    Yes, it's always helpful to provide entire stacktrace if possible to hunt down origin of the issue. Btw, by looking at the stack info here saying 'DeadSystemException', I can point you to this URL: https://developer.android.com/reference/android/os/DeadSystemException Anyways, looks like piece of code from your app is becoming memory hungry taking down entire os is my initial assumption but I can be wrong. I can tell after looking at the whole stacktrace if possible. – Jeel Vankhede May 04 '22 at 07:05
  • 1
    related: https://stackoverflow.com/questions/42784731/android-deadsystemexception – Blundell May 04 '22 at 14:01
  • @JeelVankhede Have attached stack traces, have obscured our package with com.our.app Many thanks for the clue so far and any additional help. – Joel Butler May 05 '22 at 17:54

0 Answers0