context.startService(intent) 或 ContextCompat.startForegroundService()(API 26+)。Service 是四大組件,生命週期獨立,廣播結束後 Service 仍在運行。onReceive 超過 10 秒會 ANR),若線程執行耗時任務,廣播結束後進程優先級降低,線程極易被系統殺掉,導致任務中斷。// BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyTaskService.class);
serviceIntent.putExtra("data", intent.getStringExtra("key"));
ContextCompat.startForegroundService(context, serviceIntent); // 或 startService
}
// Service (IntentService 已棄用,推薦自定義 Service + 線程池)
public class MyTaskService extends Service {
private ExecutorService executor = Executors.newSingleThreadExecutor();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String data = intent.getStringExtra("data");
executor.execute(() -> {
doLongTask(data);
stopSelf(startId); // 任務結束停止服務
});
return START_NOT_STICKY;
}
// ...
}
Android Jetpack WorkManager 專為可延遲、可持久化的後台任務設計,自動處理 Doze 模式、電池優化、進程死亡重試,完全替代「廣播啟動線程」的場景:
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(MyWorker.class)
.setInputData(new Data.Builder().putString("key", value).build())
.build();
WorkManager.getInstance(context).enqueue(work);
廣播中**只做輕量分發**(啟動 Service/WorkManager/發送通知),**嚴禁**直接執行耗時邏輯或啟動裸線程。