【问题标题】:How to view the Back Stack programmatically?如何以编程方式查看 Back Stack?
【发布时间】:2018-09-17 14:18:01
【问题描述】:

我正在尝试创建一个应用程序(“ShowStack”)来查看当前的应用程序返回堆栈(用于开发目的)。我知道这可以通过使用带有命令“adb shell dumpsys 活动活动”的 adb 来完成。 我尝试使用 ActivityManager 函数 getAppTasks() 和 getRunningProcesses 等。但这些只返回 1 个项目的列表,即当前应用程序/任务“ShowStack”,我已经知道了,谢谢。

如何查看所有任务/活动?

【问题讨论】:

    标签: android android-activitymanager


    【解决方案1】:

    没有任何 API 可以让您查看整个后台堆栈。除非您针对的是 Root 设备,否则您很可能不走运,因为出于安全/隐私原因,无法对其进行检查。

    【讨论】:

    • 那么,dumpsys 是如何工作的呢?我几乎可以肯定 adb shell 不会以 root 身份运行。
    【解决方案2】:

    您可以使用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())
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2013-04-06
      • 2018-07-09
      • 1970-01-01
      • 2016-07-15
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多