預設情況下,Service 與 Activity 運行在同一進程(主進程)。但 Service 可以透過 android:process 屬性指定獨立進程:
<service android:name=".MyService" android:process=":remote" />
即使同進程,Service 的生命週期獨立於 Activity。使用者關閉所有 Activity(按返回鍵或滑動關閉),進程不會立即銷毀,只要有 Service 處於 START_STICKY 或綁定狀態,系統會保留進程。
thread.setDaemon(true) 標記為守護執行緒,當所有非守護執行緒結束時,JVM/ART 會直接終止守護執行緒,不等待其完成。| 項目 | Activity | Service | Thread |
|---|---|---|---|
| 生命週期控制 | 系統回調 | startService / bindService | start() / run() 結束 |
| 預設進程 | 主進程 | 主進程(可指定獨立) | 所屬進程 |
| 應用「退出」影響 | onDestroy → 進程可能存活 | 不受直接影響 | 進程結束時強制終止 |
| 長時間任務適合度 | 低(易被回收) | 高(前台服務更穩) | 需自行管理生命週期 |
Foreground Service(顯示通知),系統極少殺死。WorkManager(API 23+)或 JobScheduler,系統自動調度、省電。new Thread(),使用 Executors / ThreadPoolExecutor 統一管理,配合 Future.cancel() 優雅停止。onDestroy() 或 finally 區塊釋放鎖、關閉流、取消網路請求。Service 不會因 Activity 關閉而自動停止,除非呼叫 stopService() 或 stopSelf()。子執行緒在進程存活期間持續運行,進程結束時由系統強制回收。正確架構應將長期任務交給 Service/WorkManager,並妥善管理執行緒生命週期與資源釋放。