背景

最近自己做的性能搜集apk出现了一些很迷的问题,其实又是机型的兼容问题,就是在性能的service运行期间如果杀掉性能搜集的apk,那么在sumsung的机器上,service会重启,而在国内的厂商定制的odm里面,就不会重启

思考

在运行service期间,如果我们杀掉apk,粗略地应该会经历下面几个过程

杀掉apk

ActivityManager判断到service没有完成

触发重启机制

重启

为什么会杀掉重启,各个厂商的表现不同?

service的onStartCommand返回值的影响

猜测是各个厂商的判断重启机制不同,这个会涉及到ActivityManager的判断机制

步骤

验证问题1:Service的onStartCommand的返回值是不是会影响Service的生命周期?

是会的,而且和OnStartCommand的返回值有关。

三星比较接近原生的android系统,从三星的现象来看,返回值影响如下:

START_STICKY:application被kill掉之后,会重启service,并且重新开始

START_NO_STICKY :没有重新启动起来

START_REDELIVER_INTENT : 这个需要实验一下

验证问题2:这个是不是跟厂商有关?

是和厂商有关的,在接近原生的系统里的预期结果应该是和官网给出的这几个期望值有关的,但是厂商不知道做了什么奇怪的操作导致了这个我们的service没有重启起来。之前在手机厂商工作的时候,他们的rom都是定制过的,需要添加白名单,应用才不会被杀死

问题

其实很多东西为什么网上说了之后但是在国内的那些手机厂商却实验不出效果,应该其中很大一部分原因就是国内的rom都不知道被改烂成什么样了,最好自己弄个android模拟器自己去实验一下。

总结

这个问题的结论就是,app杀掉的预期结果不同的手机厂商是不一样的,因为手机厂商很多东西都是定制过的,真的不做兼容性测试,这个是搞不出来的。所以以后多点在原生的系统去验证官网说的那些东西,然后如果有需要的测试项的话,就需要拿多点国内的手机厂商的手机去实验一下。