JAVA 进程响应缓慢,ANR,卡顿排查(开发日常必备技能)

要在root用户下

1.获取java进程的PID
ps -ef|grep 【包名|pid】

 查找进程

adb shell ps | find "com.beantechs.map.watchdog"

2.获取所有进程:
adb shell ps

3.查看进程堆栈状态
kill -3 PID  (会在data/anr/下生成对应文件。来看到对应进程的所有线程的状态)

kill pid :发送15信号,终止进程

kill-9 pid:立即停止进程,危险命令,可以杀死所有的进程,如僵尸进程


4.查看是谁启动了自己
关于Activity的getReferrer()之一:如何在Activity中获取调用者?_爱博客大伯的博客-CSDN博客_getreferrer

最常用

Uri referrer = getReferrer();
Log.w(TAG, "referrer"+referrer);


adb push  C:/cc.txt   /sdcard/data/.aa.txt 往手机中push文件 如果push不进去 可以先试试 adb root (root) adb remount (挂载)

adb pull  /data/anr/trace_00  D:/aa.txt (可能失败 ,可以现在 D盘先建立 aa.txt文件)


------------------------------------------------ctrace---------------------------------------------------------------

开始抓取:
adb shell atrace --async_start -c -b 65536 res workq idle dalvik freq irq am sync binder_driver input hal view sched wm gfx camera

结束抓取:
adb shell atrace --async_stop -z -c -o /data/local/traces/xxx.ctrace

查看ctrace 文件

Perfetto UI

-----------------------------------------------------开机启动动画流程-----------------------------------------

Android开机动画启动流程 - Anita-ff - 博客园

-------------------------------------------dumpsys surfaceflinger------------------------------
https://blog.csdn.net/feifei_csdn/article/details/81703778

----------------------------------------子线程刷新UI捕获后带来的隐患-----------------------

子线程刷新UI 如果被捕获以后,会导致所有控件刷新流程失效

---------------------------------------Choreographer-----------------------------------------

systrace 中为什么在帧中有出现大量的(Choreographer#doFrame–>animation)没有draw的帧?

  *Choreographer(编舞者)在接收到垂直同步信号之后,会回调提前注册好的回调CallbackRecord去执行后续逻辑,如

"input", "animation", "traversal", "commit"等流程,正常的页面刷新,一般都会有 "input", "animation", "traversal"的流程去完成UI刷新

为什么当前systrace 会有很多,(Choreographer#doFrame–>animation)?

:怀疑是应用有去自己注册Choreographer(编舞者)的postCallback添加垂直同步回调的监听,也只注册了animation来处理业务逻辑,导致systrace 中只有Choreographer#doFrame–>animation的流程,如TextView 的跑马灯效果的systrace

---------------------------------------------------systrace如何抓-------------------------------------------

环境配置:

1.安装2.7的python 

2.在Android studio sdk下面的platform-tools(检查是否有systrace文件夹)没有就下载(https://download.csdn.net/download/qq_18420641/87424123)

2.使用命令(python  C:\Users\admin\AppData\Local\Android\Sdk\platform-tools\systrace\systrace.py gfx input view wm am bionic power sched camera freq idle video -b 20480 -t 4 -o capture.html)

ImportError: No module named six

ImportError: No module named six,已解决_ssuqin001的博客-CSDN博客_importerror: no module named six

下载和安装pywin32

如何下载和安装pywin32(亲测有效)_我的光荣的博客-CSDN博客_pywin32下载安装

在使用命令抓取时可能会报错,根据错误提示处理即可,不多解释

------------------------------------常用日常辅助工具-------------------------------

文档工具Typora

时序图工具 Astah

-----------------------------------------------------------------------------------------

adb shell ps -ef | grep system_server查看对应应用的pid

adb shell ps -T -p  {pid} 输出应用所有的线程

-------------------------adb shell 的使用-----------------

看源码  

====================

源码中常使用 AttributeCache 来读取应用配置的一些属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值