Open dede1314 opened 7 years ago
为什么要始终在前台呢,起个后台服务也可以啊
行业定制,就是说类似于商户的手持收款机一样,保持app 始终在前台运行。因为不会运行其他的应用。而我们的应用使用频率很高,因此保持始终在前台运行。
ARN不是有一个trace.txt日记的吗,看看能不鞥从这个日记中找到一下报错信息。 我记得我之前在使用Thread.sleep("100000")模拟一个ANR的Demo的时候,可以通过trace.txt找到阻塞的代码行信息。
用blockcanary监测下?
注释掉业务逻辑,只加载ui,看看还会不会卡死,一点一点缩小范围,确认是哪里引起的问题。
@catroom blockcanary 和ANRwatchdog 都检测不到。
@helloworldwen 这个现象没有产生trace 文件。 如果去点击就会产生ANR。这个时候才有trace生成。界面卡住的时候没有产生ANR.
ANRwatchdog 都检测不到
这就尴尬了,坐等方案 @dede1314
现在在做一个行业定制的app。就是一个APP 始终运行在前台,充当控制终端。 系统是4.4。不需要再其他系统上运行,故没有在其他系统上运行。
在长时间运行基本的逻辑情况下(左右运动的属性动画和时间的变换 setText的方式),会界面卡死,此时不会输入任何应用相关的日志。从正常到界面卡死的时间不定,有时候一个小时就卡死了,有时候一两天还是正常的。 界面会一直卡,只有当连上adb 时会自动恢复,动画和时间开始动,后台log开始正常打印。
使用过WatchDog和BlockCanary,都不能有效解决。
现在判断是主线程被阻塞了,连上adb 查看线程pid 还是原来的pid。如果此时点击屏幕,会出现输入事件无响应的ANR。
正常的log最后如下: dalvikvm(26456): GC_FOR_ALLOC freed 2599K, 51% free 8365K/17032K, paused 61ms, total 62ms
阻塞后恢复正常的日志如下: 08-23 08:11:22.924 E/jdwp (26456): Failed sending b-req to debugger: Connection reset by peer (-1 of 52) 08-23 08:11:22.934 D/dalvikvm(26456): Debugger has detached; object registry had 1 entries 08-23 08:11:22.944 I/Choreographer(26456): Skipped 2027246 frames! The application may be doing too much work on its main thread.
但现在并没有发现主线程阻塞的地方。有内存泄漏,但应该不是导致这个问题出现的原因。
如何去检测主线程阻塞在何处?或者对这个问题有什么解决思路吗? 公司自己编译的rom。可以改动framework层加日志?但没有思路,不知道加在何处?