首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 服務在真機上被系統殺死的應對策略:前台服務、白名單、JobScheduler 替代方案

     編輯:程式設計疑難解答

現象

模擬器正常,真機(國產 ROM:小米、華為、OPPO、VIVO 等)啟動服務後不久被殺死,Running Services 列表不顯示,但代碼檢查顯示運行中。

原因

廠商定制電池優化策略:非白名單應用後台服務在熄屏/內存壓力下被強制停止。

解決方案

  1. 前台服務: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());
  2. 引導用戶加入白名單:跳轉電池優化設置頁面。
    Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
  3. 遷移至 WorkManager:延遲、周期性、網絡條件觸發任務,系統保證執行。
    PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES).build();
    WorkManager.getInstance(context).enqueue(work);

選型建議

  • 長連接/即時通訊 → 前台服務 + 白名單引導。
  • 定時同步/上傳日誌 → WorkManager。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved