從 Android 3.1 起,系統引入應用停止狀態。處於此狀態的應用,系統不會發送任何隱式廣播(包括 `BOOT_COMPLETED`)。停止狀態包括:
不要只依賴 `BOOT_COMPLETED`,同時監聽以下廣播(需在 Manifest 靜態註冊):
| 廣播 Action | 觸發時機 | 備註 |
|---|---|---|
| `android.intent.action.BOOT_COMPLETED` | 系統啟動完成 | 標準廣播,需 RECEIVE_BOOT_COMPLETED 權限 |
| `android.intent.action.MEDIA_MOUNTED` | 外部存儲掛載完成 | 部分設備開機時會觸發,需 `android:exported="true"` |
| `android.intent.action.USER_PRESENT` | 用戶解鎖屏幕 | 用戶首次解鎖時觸發,適合延遲啟動 |
| `android.intent.action.QUICKBOOT_POWERON` | HTC/部分設備快速開機 | 廠商專用,作為補充 |
| `com.htc.intent.action.QUICKBOOT_POWERON` | HTC 設備 | 同上 |
<receiver android:name=".BootReceiver" android:enabled="true" android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
開機自啟動在國產 ROM 上本質是「對抗遊戲」。多廣播監聽 + 白名單引導 + 前台服務三管齊下,才能最大程度保證到達率。