模擬器正常,真機(國產 ROM:小米、華為、OPPO、VIVO 等)啟動服務後不久被殺死,Running Services 列表不顯示,但代碼檢查顯示運行中。
廠商定制電池優化策略:非白名單應用後台服務在熄屏/內存壓力下被強制停止。
startForeground(id, notification),通知欄常駐圖標,系統極少殺死。NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("服務運行中")
.setSmallIcon(R.drawable.ic_service)
.setPriority(NotificationCompat.PRIORITY_LOW);
startForeground(1, builder.build());Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES).build();
WorkManager.getInstance(context).enqueue(work);