文章目录

  • 1. 查看当前Fragment的adb命令
  • 2. 案例演示
    • 2.1 案例代码
    • 2.2 手机连接电脑,运行代码到手机
    • 2.3 打开控制终端
    • 2.4 输入adb命令
    • 2.5 查看输出结果
    • 2.6 添加Fragment,再命令查看
    • 2.7 添加Fragment,并添加到BackStack,再命令查看
  • 3. 总结

为了更好的了解Fragment在app中的存在状态(比如说,当前添加了几个Fragment、他们的层级关系如何、BackStack里有没有Fragment等),我们需要能够查看当前Fragment的情况。本文将介绍 如何通过adb命令行查看当前Fragment

1. 查看当前Fragment的adb命令

打开控制终端。就是那个黑窗口,window下可按win+R调出执行窗口,然后输入cmd,回车,就能弹出。mac电脑直接搜索terminal或者找到终端即可。
输入以下命令:

adb shell dumpsys activity fragment

2. 案例演示

下面用一个小案例来演示查看Fragment的过程。

2.1 案例代码

首先,准备Fragment: FragmentA.java

// 导包省略。。。
public class FragmentA extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_a, container, false);}
}

然后,准备Activity: TestActivity.java

// 导包省略。。。
public class TestActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);}public void addFragment(View view) {getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, FragmentA.class, null).commit();}public void addFragmentAndBackStack(View view) {getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, FragmentA.class, null).addToBackStack("myBackStack").setReorderingAllowed(true).commit();}
}

布局文件:activity_test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.fragment.app.FragmentContainerViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/fragment_container"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="20sp"android:text="添加Fragment"android:onClick="addFragment"android:textAllCaps="false"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="20sp"android:text="添加Fragment并加入BackStack"android:onClick="addFragmentAndBackStack"android:textAllCaps="false"/>
</LinearLayout>

2.2 手机连接电脑,运行代码到手机

这里的连接指的是能够一键运行代码,安装到设备上进行调试开发的那种状态。需要开启开发者模式,打开USB调试,相信稍微有过Android开发经验的小伙伴都知道,不再赘述。

2.3 打开控制终端

打开控制终端。就是那个黑窗口,window下可按win+R调出执行窗口,然后输入cmd,回车,就能弹出。mac电脑直接搜索terminal或者找到终端即可。

2.4 输入adb命令

也就是上文提到的,输入以下命令:

adb shell dumpsys activity fragment

2.5 查看输出结果

输出内容很多,直接拉到最后,看关键词:“Local FragmentActivity”

 Local FragmentActivity cd1c582 State:mCreated=true mResumed=true mStopped=false    Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@d5cbaa8mContainer=androidx.fragment.app.FragmentActivity$HostCallbacks@d5cbaa8mCurState=7 mStateSaved=false mStopped=false mDestroyed=false

这里可以看到Local FragmentActivity里还没有Fragment。因为我们还没有点击添加Fragment按钮。

2.6 添加Fragment,再命令查看

点击“添加Fragment”按钮, 然后再次执行上面命令adb shell dumpsys activity fragment,结果如下:

 Local FragmentActivity 480780e State:mCreated=true mResumed=true mStopped=false    Active Fragments:FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)mFragmentId=#7f0800d3 mContainerId=#7f0800d3 mTag=nullmState=7 mWho=e04b5bf9-9719-4629-a914-bf9c0ef11b54 mBackStackNesting=0mAdded=true mRemoving=false mFromLayout=false mInLayout=falsemHidden=false mDetached=false mMenuVisible=true mHasMenu=falsemRetainInstance=false mUserVisibleHint=truemFragmentManager=FragmentManager{90a3819 in HostCallbacks{2c7b0de}}}mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demPopDirection=falsemContainer=androidx.fragment.app.FragmentContainerView{9cce02e V.E...... ........ 0,52-1080,313 #7f0800d3 app:id/fragment_container1}mView=android.widget.LinearLayout{a1da7cf V.E...... ........ 0,0-1080,261}Child FragmentManager{9e22bf in FragmentA{70fbb60}}}:Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.Fragment$4@a52d8cmParent=FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)mCurState=7 mStateSaved=false mStopped=false mDestroyed=falseAdded Fragments:#0: FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demCurState=7 mStateSaved=false mStopped=false mDestroyed=false

从上面可以看到,Local FragmentActivity的状态已经存在活跃的Fragment了:“Active Fragments”。
此时,活跃的Fragment就是我们添加的FragmentA,从输出信息中可以看出它的id、状态等信息。

关键信息解释:

  • Active Fragments:当前活跃的Fragment
  • Added Fragments: 当前被添加到容器View的Fragment
  • Back Stack: Fragment后台栈的情况

让我们再点击一次“添加Fragment”,看看添加两个Fragment后的情况

输出结果:

 Local FragmentActivity 480780e State:mCreated=true mResumed=true mStopped=false    Active Fragments:FragmentA{85b0d8} (d789ff6b-8df2-499b-a614-1e13d1496afa id=0x7f0800d3)mFragmentId=#7f0800d3 mContainerId=#7f0800d3 mTag=nullmState=7 mWho=d789ff6b-8df2-499b-a614-1e13d1496afa mBackStackNesting=0mAdded=true mRemoving=false mFromLayout=false mInLayout=falsemHidden=false mDetached=false mMenuVisible=true mHasMenu=falsemRetainInstance=false mUserVisibleHint=truemFragmentManager=FragmentManager{90a3819 in HostCallbacks{2c7b0de}}}mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demPopDirection=falsemContainer=androidx.fragment.app.FragmentContainerView{9cce02e V.E...... ........ 0,52-1080,313 #7f0800d3 app:id/fragment_container1}mView=android.widget.LinearLayout{14dc9b5 V.E...... ........ 0,0-1080,261}Child FragmentManager{3de4c31 in FragmentA{85b0d8}}}:Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.Fragment$4@fc38f16mParent=FragmentA{85b0d8} (d789ff6b-8df2-499b-a614-1e13d1496afa id=0x7f0800d3)mCurState=7 mStateSaved=false mStopped=false mDestroyed=falseFragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)mFragmentId=#7f0800d3 mContainerId=#7f0800d3 mTag=nullmState=7 mWho=e04b5bf9-9719-4629-a914-bf9c0ef11b54 mBackStackNesting=0mAdded=true mRemoving=false mFromLayout=false mInLayout=falsemHidden=false mDetached=false mMenuVisible=true mHasMenu=falsemRetainInstance=false mUserVisibleHint=truemFragmentManager=FragmentManager{90a3819 in HostCallbacks{2c7b0de}}}mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demPopDirection=falsemContainer=androidx.fragment.app.FragmentContainerView{9cce02e V.E...... ........ 0,52-1080,313 #7f0800d3 app:id/fragment_container1}mView=android.widget.LinearLayout{a1da7cf V.E...... ........ 0,0-1080,261}Child FragmentManager{9e22bf in FragmentA{70fbb60}}}:Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.Fragment$4@a52d8cmParent=FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)mCurState=7 mStateSaved=false mStopped=false mDestroyed=falseAdded Fragments:#0: FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)#1: FragmentA{85b0d8} (d789ff6b-8df2-499b-a614-1e13d1496afa id=0x7f0800d3)Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demCurState=7 mStateSaved=false mStopped=false mDestroyed=false

可以看出,Added Fragments显示出当前有两个FragmentA,#0 代表第一次添加的Fragment,#1代表第二次添加的。

2.7 添加Fragment,并添加到BackStack,再命令查看

点击“添加Fragment并加入BackStack”按钮,再次输入命令 adb shell dumpsys activity fragment,结果如下:

Local FragmentActivity 480780e State:mCreated=true mResumed=true mStopped=false    Active Fragments:FragmentA{85b0d8} (d789ff6b-8df2-499b-a614-1e13d1496afa id=0x7f0800d3)mFragmentId=#7f0800d3 mContainerId=#7f0800d3 mTag=nullmState=7 mWho=d789ff6b-8df2-499b-a614-1e13d1496afa mBackStackNesting=0mAdded=true mRemoving=false mFromLayout=false mInLayout=falsemHidden=false mDetached=false mMenuVisible=true mHasMenu=falsemRetainInstance=false mUserVisibleHint=truemFragmentManager=FragmentManager{90a3819 in HostCallbacks{2c7b0de}}}mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demPopDirection=falsemContainer=androidx.fragment.app.FragmentContainerView{9cce02e V.E...... ........ 0,52-1080,313 #7f0800d3 app:id/fragment_container1}mView=android.widget.LinearLayout{14dc9b5 V.E...... ........ 0,0-1080,261}Child FragmentManager{3de4c31 in FragmentA{85b0d8}}}:Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.Fragment$4@fc38f16mParent=FragmentA{85b0d8} (d789ff6b-8df2-499b-a614-1e13d1496afa id=0x7f0800d3)mCurState=7 mStateSaved=false mStopped=false mDestroyed=falseFragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)mFragmentId=#7f0800d3 mContainerId=#7f0800d3 mTag=nullmState=7 mWho=e04b5bf9-9719-4629-a914-bf9c0ef11b54 mBackStackNesting=0mAdded=true mRemoving=false mFromLayout=false mInLayout=falsemHidden=false mDetached=false mMenuVisible=true mHasMenu=falsemRetainInstance=false mUserVisibleHint=truemFragmentManager=FragmentManager{90a3819 in HostCallbacks{2c7b0de}}}mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demPopDirection=falsemContainer=androidx.fragment.app.FragmentContainerView{9cce02e V.E...... ........ 0,52-1080,313 #7f0800d3 app:id/fragment_container1}mView=android.widget.LinearLayout{a1da7cf V.E...... ........ 0,0-1080,261}Child FragmentManager{9e22bf in FragmentA{70fbb60}}}:Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.Fragment$4@a52d8cmParent=FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)mCurState=7 mStateSaved=false mStopped=false mDestroyed=falseFragmentA{80cf313} (48e80f6d-d9b2-4ba2-a1a0-203127bab718 id=0x7f0800d3)mFragmentId=#7f0800d3 mContainerId=#7f0800d3 mTag=nullmState=7 mWho=48e80f6d-d9b2-4ba2-a1a0-203127bab718 mBackStackNesting=1mAdded=true mRemoving=false mFromLayout=false mInLayout=falsemHidden=false mDetached=false mMenuVisible=true mHasMenu=falsemRetainInstance=false mUserVisibleHint=truemFragmentManager=FragmentManager{90a3819 in HostCallbacks{2c7b0de}}}mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demPopDirection=falsemContainer=androidx.fragment.app.FragmentContainerView{9cce02e V.E...... ........ 0,52-1080,313 #7f0800d3 app:id/fragment_container1}mView=android.widget.LinearLayout{7a812e4 V.E...... ........ 0,0-1080,261}Child FragmentManager{3457950 in FragmentA{80cf313}}}:Back Stack Index: 0FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.Fragment$4@36b3749mParent=FragmentA{80cf313} (48e80f6d-d9b2-4ba2-a1a0-203127bab718 id=0x7f0800d3)mCurState=7 mStateSaved=false mStopped=false mDestroyed=falseAdded Fragments:#0: FragmentA{70fbb60} (e04b5bf9-9719-4629-a914-bf9c0ef11b54 id=0x7f0800d3)#1: FragmentA{85b0d8} (d789ff6b-8df2-499b-a614-1e13d1496afa id=0x7f0800d3)#2: FragmentA{80cf313} (48e80f6d-d9b2-4ba2-a1a0-203127bab718 id=0x7f0800d3)Back Stack:#0: BackStackEntry{af4f84e #0 myBackStack}mName=myBackStack mIndex=0 mCommitted=trueOperations:Op #0: ADD FragmentA{80cf313} (48e80f6d-d9b2-4ba2-a1a0-203127bab718 id=0x7f0800d3)Back Stack Index: 1FragmentManager misc state:mHost=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demContainer=androidx.fragment.app.FragmentActivity$HostCallbacks@2c7b0demCurState=7 mStateSaved=false mStopped=false mDestroyed=false

可以看出,Added Framents处已经有三个添加记录了,正是对应了我们之前三次添加的操作,并且按照添加的顺序,先添加的序号小,后添加的序号大。
这次添加操作我们增加了addToBackStack("myBackStack"),将Fragment添加到容器View的同时,也添加到了BackStack。因此,注意到输出信息里Back Stack处也有了记录:

 Back Stack:#0: BackStackEntry{af4f84e #0 myBackStack}mName=myBackStack mIndex=0 mCommitted=trueOperations:Op #0: ADD FragmentA{80cf313} (48e80f6d-d9b2-4ba2-a1a0-203127bab718 id=0x7f0800d3)Back Stack Index: 1

mName=myBackStack,对应了我们的addToBackStack("myBackStack")
Operations:里的#0: ADD FragmentA{80cf313},是添加到BackStack的Fragment记录。从 80cf313 可以看出和Added Fragments处的 #3 是同一个Fragment,也就是我们第三次添加的Fragment。这就证明了我们将Fragment添加到容器View的同时,也添加到了BackStack。

3. 总结

以上就是对adb命令查看Framgent的介绍,包括 adb命令 、 如何从大量输出结果里快速找到关键信息、如何从输出信息判断Fragment的状态。
本例只是用添加两三个Fragment作为简单演示,如果你想查看更加复杂的Fragment场景,可以结合上一篇文章Fragment的编辑-增删查替显示隐藏自己调用remove、replace等方法操作Fragment,然后用本文的方法查看Fragment状态,进一步加深对Fragment的理解。

使用adb命令行查看当前Fragment情况相关推荐

  1. linux关闭端口进程命令,windows Linux 下命令行查看端口占用情况并且关闭进程

    1.查看端口占用 > netstat -aon | findstr "80" 结果: TCP    0.0.0.0:80             0.0.0.0:0     ...

  2. adb命令行 查看手机 ip

    cmd 直接运行,一条命令,查看adb的无线IP adb shell ip addr show wlan0 | grep "inet "| cut -f1 -d "/&q ...

  3. [整理]ADB命令行学习笔记

    global driver # 元素定位 driver.find_element_by_id("id") # id定位 driver.find_element_by_name(&q ...

  4. 最全的ADB命令行大全(转)

    基本用法 命令语法 adb 命令的基本语法如下: adb [-d|-e|-s] 如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb . 为命令指定目标设备 ...

  5. android 环境配置和安装, Android系统包说明,基本控件,常用代码,ADB 命令行,APK文件确解,小技艺,...

    一.             环境配置和安装(Android2.2) 参考文章:这里 1.1     JDK 1.2     SDK 下载地址:http://dl.google.com/android ...

  6. CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!...

    CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程! 不用任何第三方软件的情况下,打开CMD执行如下命令:1,netstat -ano 你可以查看到Local ...

  7. [连接 Android ]-使用 adb 命令行通过数据线进入安卓手机系统

    ################################################## 目录 通过 adb 命令行进入安卓手机 ADB 通过 USB 连接手机准备 成功连接 vivo X ...

  8. Android用命令行查看手机架构

    用命令行查看安卓手机的架构: adb shell cat /proc/cpuinfo 结果实例: processor : 0 BogoMIPS : 3.84 Features : fp asimd e ...

  9. ADB命令行卸载或删除你的Android设备中的应用

    如果你对你的Android设备在与命令行的交互间有一定的兴趣,那你可能想学习一些使用ADB卸载设备中已安装应用的技巧.为了使这种方法生效,你将需要在你的电脑中设置好Android ADB.可以去看看关 ...

最新文章

  1. Java线程池--拒绝策略RejectedExecutionHandler
  2. 完整国内城市js级联选择
  3. android+动画+锯齿,Android当中的防锯齿(Bitmap Canvas )
  4. 【渝粤题库】广东开放大学 岭南文化概论专科 形成性考核
  5. SearchParams(URL获取参数)
  6. Apache 模块 mod_cache应用
  7. Hash算法原理的简单分析
  8. python 常用快捷键
  9. rgb sw 线主板接口在哪_配置升级性能再突破,华硕TUF GAMING B460M-PRO 重炮手主板爆款来袭...
  10. Windows消息类型及说明(全面)
  11. 一些事,只配当回忆.一些人,只能做过客。既不回头 何必不忘 既然无缘 何必誓言 。这个世界.那么脏.谁有资格.说悲伤。...
  12. excel打开表 正在计算机,事实:在Excel中打开表格时响应缓慢的解决方案技术
  13. 发票信息批量提取到 excel 软件 4.0
  14. 利用机器学习预测外汇汇率
  15. 最想和你做的100件事,我们一件一件的去完成
  16. 顾险峰:技术爆炸的亲历观察
  17. 说好的牛市来了,我的股票怎么跌停了?
  18. 计算机基础及Java语法
  19. 软件测试的五个目的,你知道几个?
  20. Android开发 —— apk打包流程

热门文章

  1. 小波变换原理与JPEG2000
  2. (官网)虚幻3--Scaleform 技术指南
  3. 四种方式搭建文件服务器
  4. 计算机原理20春期末考核,[南开大学]《计算机原理》20春期末考核(参考答案)...
  5. windows系统下(win10),使用IIS搭建自己的专属网站
  6. org.apache.axis2.AxisFault: unknown
  7. Spring AOP 从入门到放弃
  8. 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
  9. 行人重识别之重排序(re-ranking)
  10. springboot+mysql学生个性的宿舍分配管理系统-计算机毕业设计源码01236