在项目中遇到一个奇怪的Bug,插上带有升级包固件的U盘,选择升级框中的放弃按钮,Activity被onDestroy,随后又重新onCreate,相应的图片和日志如下:
【一】 现象和日志
1、升级框
2、点击放弃按钮
3.日志如下:
1528 D MainActivity: onCreate
1528 1528 D MainActivity: onResume
1528 1528 D MainActivity: surfaceChanged
1528 1528 D MainActivity: onStop
1528 1528 D MainActivity: onDestroy
1528 D MainActivity: onCreate
从日志中看,PID为1528,没有变化,说明进程还是在的,只是Activity被重新创建了,由于Activity重新创建,底层so资源释放存在一点问题,所以如图二所见,崩溃了。
【二】、原因分析
有一些Android开发经验的朋友都知道,如果Activity被销毁,一般ActivityManager会打印出一些比如,force stop - destroy XXActivity之类的,很可惜我打印出来的日志没有。
没办法,先提出几个可能导致的原因,然后逐一排查。
(1)、和升级框会不会有必然的关系?为什么点击放弃之后,Activity就创建呢?升级框是不是干掉我们呢?
(2)、是不是系统底层的某种机制或者策略导致了Activity重新创建?
好,顺着这个思路,先把RkUpdateService.apk pull出来,反编译,查看其到底做了什么,为了保护原作者的创作,这里我就不贴出来截图了,结果是他们 do Nothing !!
第一条思路排除了,那现在