Как просмотреть Back Stack программно?

Я пытаюсь создать приложение ("ShowStack") для просмотра текущего стека приложений (в целях разработки). Я знаю, что это можно сделать с помощью adb с командой "adb shell dumpsys активность активности". Я пытался использовать функции ActivityManager getAppTasks() и getRunningProcesses и т. Д. Но они возвращают только список из 1 элемента, текущего приложения / задачи "ShowStack", которое я уже знал, спасибо.

Как я могу просмотреть все задачи / действия?

1 ответ

Там нет API, который позволяет просматривать весь backstack. Если вы не нацелены на корневые устройства, вам, скорее всего, не повезет, поскольку нет способа проверить это по соображениям безопасности / конфиденциальности.

Вы можете написать свой собственный, используя Application.ActivityLifecycleCallbacks:

class MyApp : Application() {
   
   override fun onCreate() {
      super.onCreate()
      ActivityBackStackTracker.install(this)
   }
}

class ActivityBackStackTracker : Application.ActivityLifecycleCallbacks {

    override fun onActivityCreated(activity: Activity, bundle: Bundle?) {
        activityStack.add(activity::class)
    }

    override fun onActivityDestroyed(activity: Activity) {
        activityStack.remove(activity::class)
    }

    //..

    companion object {
        private val activityStack = mutableListOf<KClass<out Activity>>()

        fun getCurrentActivityStack() = listOf(activityStack)

        fun install(app: Application) {
            app.registerActivityLifecycleCallbacks(ActivityBackStackTracker())
        }
    }
}
Другие вопросы по тегам