自從換了Nexus 6p后就一直用綠色守護(hù)[免費(fèi)版]做后臺服務(wù)管理。沒事的時候打開綠色守護(hù)點(diǎn)點(diǎn)就能殺一遍后臺服務(wù)番捂,挺管用个唧。
但是漸漸發(fā)現(xiàn)大部分應(yīng)用進(jìn)程能被都?xì)⑺溃侵Ц秾毶柙ぁQ等總是不能被自動殺死并提示“界面被開啟”徙歼,但是實(shí)際上并不能找到開啟的頁面在哪。
感覺被耍流氓啦鳖枕。趕緊學(xué)習(xí)下魄梯,說不定哪天我們也要耍。
進(jìn)程優(yōu)先級
(從Bugly盜圖)
進(jìn)程優(yōu)先級如圖所示宾符,當(dāng)系統(tǒng)資源不足時會從下向上開始回收酿秸。綠色守護(hù)判定未“界面被開啟”至少是前臺進(jìn)程(Foreground process)或可見進(jìn)程(Visible process)。所謂的前臺進(jìn)程只能有一個魏烫,是指當(dāng)前用戶正在使用的應(yīng)用的進(jìn)程(我在用綠色守護(hù)唉辣苏,綠色守護(hù)就是當(dāng)前的前臺進(jìn)程)。所以說這類應(yīng)用是將自己的服務(wù)從后臺服務(wù)優(yōu)先級為4升級到了可見服務(wù)優(yōu)先級為2哄褒。
但是android系統(tǒng)從2.3開始要求你要把一個服務(wù)提升為可見服務(wù)必須要在通知欄放一條通知稀蟋。也就是跟QQ音樂似得,可以后臺運(yùn)行呐赡,但是必須要顯示一個通知讓用戶感知到退客。你想運(yùn)行又不想讓用戶感知到,那豈不就流氓了罚舱。
如何能實(shí)現(xiàn)不顯示通知的可見服務(wù)
無通知的可見服務(wù)井辜,算是利用的Android系統(tǒng)的漏洞绎谦。當(dāng)后臺服務(wù)A轉(zhuǎn)可見服務(wù)時,需要綁定一個可見推送N1(ID為1234)粥脚。A啟動另外一個后臺服務(wù)B窃肠,B轉(zhuǎn)可見服務(wù)依舊版定N1(ID為1234),B服務(wù)關(guān)閉通知N1轉(zhuǎn)為后臺服務(wù)后服務(wù)A依舊為可見服務(wù)刷允。
具體代碼如下:
public class CustomTestService extends Service {
public static final int NOTIFICATION_ID = 1234;
private static final String TAG = "CustomTestService";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
if (Build.VERSION.SDK_INT < 18) {
//18以前空通知欄即可
startForeground(NOTIFICATION_ID, new Notification());
} else {
Intent innerIntent = new Intent(this, CustomTestInnerService.class);
startService(innerIntent);
startForeground(NOTIFICATION_ID, new Notification());
}
return super.onStartCommand(intent, flags, startId);
}
private static class CustomTestInnerService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(NOTIFICATION_ID, new Notification());
stopForeground(true);
stopSelf();
return super.onStartCommand(intent, flags, startId);
}
}
}
現(xiàn)在我們的服務(wù)也是偷摸升級為可見服務(wù)了冤留,優(yōu)先級提高一截。
吐槽: Android開發(fā)好蛋疼树灶,Android用戶更蛋疼纤怒。大廠都搞這種流氓保活天通,小廠一跟風(fēng)泊窘,弄最后優(yōu)先級不為2的都不能叫服務(wù)。最終受害者還是我大天朝群眾像寒。從自身做起烘豹,愿人間App沒有流氓.....