应用常见问题分析思路
-
应用问题分类
功能 (停止运行,响应出错)
显示 (花屏,黑屏,闪屏,显示出错)
功耗,内存
-
停止运行
查看Assertlog -> 查看mainlog -> 分析解决异常 -
响应异常
按键或者触摸屏幕,手机没有响应或者响应异常
异常原因:硬件问题,框架服务,事件未传给应用,应用逻辑错误
分析思路:应用窗口是否收到事件,是 则为应用内部逻辑问题,否 判断是否为硬件和框架问题。不 是硬件和框架的问题就分析log确定事件传递给了哪个窗口。
打开 “开发者选项”- “指针位置” 若显示路径则不是硬件或者框架问题。
'adb shell dumpsys input' 确定窗口接受事件的顺序
'adb shell dumpsys SurfaceFlinger'查看窗口显示层级(当前显示的activity) -
显示异常
花屏分析:截图判断。截图显示正常,若打开‘停用HW叠加层’问题消失说明是HW叠加问题。截 图不正常则判断是否为硬件加速问题,不是则为应用内问题。
黑屏,闪屏分析:关闭动画。正常则为动画切换问题,查看动画设置修改动画。不正常则dump图形 layer,查看是否是starting窗口的问题。 -
内存泄漏和oom
内存泄漏:程序向系统申请分配内存空间后,在使用完毕后未释放,结果导致一直占据该内存单元, 不能被其他进程使用。
内存溢出:程序向系统申请的内存空间超出了系统能给的范围。
分析思路:判断是否内存泄漏,判断java层泄露(抓取hprof文件并分析)还是c层泄露(showmap命令查看)。
'adb shell dumpsys meminfo packname' 分析内存泄漏在哪一层 -
其他工具
抓取eventlog*: 'adb logcat -b events -v time >log_events.txt'打印系统事件日志(触摸事件,进程 activity的创建销毁等)。
dumpsys查看 服务 的状态信息,只要是service都可以触发一些dump操作,通过'dumpsys | grep DUMP'查看服务