背景
最近自己做的性能搜集apk出現(xiàn)了一些很迷的問題,其實(shí)又是機(jī)型的兼容問題,就是在性能的service運(yùn)行期間如果殺掉性能搜集的apk,那么在sumsung的機(jī)器上,service會(huì)重啟,而在國(guó)內(nèi)的廠商定制的odm里面,就不會(huì)重啟
思考
在運(yùn)行service期間,如果我們殺掉apk,粗略地應(yīng)該會(huì)經(jīng)歷下面幾個(gè)過程
- 殺掉apk
- ActivityManager判斷到service沒有完成
- 觸發(fā)重啟機(jī)制
- 重啟
為什么會(huì)殺掉重啟,各個(gè)廠商的表現(xiàn)不同?
- service的onStartCommand返回值的影響
- 猜測(cè)是各個(gè)廠商的判斷重啟機(jī)制不同,這個(gè)會(huì)涉及到ActivityManager的判斷機(jī)制
步驟
驗(yàn)證問題1:Service的onStartCommand的返回值是不是會(huì)影響Service的生命周期?
是會(huì)的,而且和OnStartCommand的返回值有關(guān)。
三星比較接近原生的android系統(tǒng),從三星的現(xiàn)象來看,返回值影響如下:
- START_STICKY:application被kill掉之后,會(huì)重啟service,并且重新開始
- START_NO_STICKY :沒有重新啟動(dòng)起來
- START_REDELIVER_INTENT : 這個(gè)需要實(shí)驗(yàn)一下
驗(yàn)證問題2:這個(gè)是不是跟廠商有關(guān)?
是和廠商有關(guān)的,在接近原生的系統(tǒng)里的預(yù)期結(jié)果應(yīng)該是和官網(wǎng)給出的這幾個(gè)期望值有關(guān)的,但是廠商不知道做了什么奇怪的操作導(dǎo)致了這個(gè)我們的service沒有重啟起來。之前在手機(jī)廠商工作的時(shí)候,他們的rom都是定制過的,需要添加白名單,應(yīng)用才不會(huì)被殺死
問題
其實(shí)很多東西為什么網(wǎng)上說了之后但是在國(guó)內(nèi)的那些手機(jī)廠商卻實(shí)驗(yàn)不出效果,應(yīng)該其中很大一部分原因就是國(guó)內(nèi)的rom都不知道被改爛成什么樣了,最好自己弄個(gè)android模擬器自己去實(shí)驗(yàn)一下。
總結(jié)
這個(gè)問題的結(jié)論就是,app殺掉的預(yù)期結(jié)果不同的手機(jī)廠商是不一樣的,因?yàn)槭謾C(jī)廠商很多東西都是定制過的,真的不做兼容性測(cè)試,這個(gè)是搞不出來的。所以以后多點(diǎn)在原生的系統(tǒng)去驗(yàn)證官網(wǎng)說的那些東西,然后如果有需要的測(cè)試項(xiàng)的話,就需要拿多點(diǎn)國(guó)內(nèi)的手機(jī)廠商的手機(jī)去實(shí)驗(yàn)一下。