如何跟踪当前可见的fragment及正在运行的activity并获取其类名
如何获取Android应用当前运行的Activity与可见Fragment类名
以下是几种不同场景下的实现方案:
方法1:使用Android Studio自带工具(无需修改代码)
- 打开Android Studio,连接测试设备并启动目标应用
- 点击顶部菜单栏的 Layout Inspector(也可以通过顶部全局搜索框直接搜索名称快速打开)
- 左侧组件树的顶部会直接展示当前栈顶Activity的完整类名,展开Activity节点下的
FragmentManager相关条目,即可看到当前所有已附加、处于可见状态的Fragment完整类名
方法2:通过代码打日志实现(支持自定义监控逻辑)
全局监控Activity生命周期
可通过注册Application的Activity生命周期回调实现全局监听,无需逐个修改Activity代码
在自定义Application的onCreate方法中添加如下代码:
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks { override fun onActivityResumed(activity: Activity) { // 处于Resumed状态的Activity就是当前正在前台运行的实例 Log.d("ComponentTracker", "当前运行Activity: ${activity.javaClass.name}") } // 其余生命周期方法空实现即可,无需额外编写逻辑 override fun onActivityCreated(p0: Activity, p1: Bundle?) {} override fun onActivityStarted(p0: Activity) {} override fun onActivityPaused(p0: Activity) {} override fun onActivityStopped(p0: Activity) {} override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {} override fun onActivityDestroyed(p0: Activity) {} })
全局监控可见Fragment
AndroidX包支持全局Fragment生命周期回调注册,同样不需要逐个修改Fragment代码
在上述Activity的onActivityResumed回调中添加如下代码:
p0.supportFragmentManager.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() { override fun onFragmentResumed(fm: FragmentManager, f: Fragment) { // 同时判断可见状态,避免统计到预加载的不可见Fragment if (f.isVisible && f.userVisibleHint) { Log.d("ComponentTracker", "当前可见Fragment: ${f.javaClass.name}") } } }, true)
方法3:使用adb命令直接查询(无需修改代码、无需打开Android Studio)
- 确保测试设备开启了USB调试,本地电脑已配置adb环境
- 执行命令
adb shell dumpsys activity top | grep ACTIVITY即可直接输出当前栈顶Activity的完整类名 - 执行命令
adb shell dumpsys activity top | grep Fragment可以筛选出当前Activity下所有Fragment的相关信息,从中可直接提取到可见Fragment的类名
内容的提问来源于stack exchange,提问作者Valery Kalesnikau
相关产品推荐
相关产品推荐

