## 項目中定時為什么用`AlarmManager`,不用`postDelayed`?
`AlarmManager` 經常被用來執行定時任務,比如設置鬧鈴、發送心跳包等。也許有人會有疑問:為什么不能使用相同具有定時效果的?`Timer` 和?`Handler` 呢?
其實答案非常簡單,相對于 `Handler` 來說,使用?`sendEmptyMessageDelayed`方法是依賴于?`Handler` 所在的線程的,如果線程結束,就起不到定時任務的效果;而?`AlarmManager` 依賴的是 **Android 系統**的服務,具備喚醒機制。比起?`Handler` 也就更合適了。
而至于?`Timer` 可以精確地做到定時操作,但是相比于?`AlarmManager` 而言還是差了一截。同理,如果手機關屏后長時間不使用,`CPU` 就會進入休眠模式。這個使用如果使用?`Timer` 來執行定時任務就會失敗,因為?`Timer` 無法喚醒 `CPU`。
所以,綜上所述,AlarmManager就成為了最佳選擇。
*****
文章到這里就全部講述完啦,若有其他需要交流的可以留言哦~!~!
想閱讀作者的更多文章,可以查看我 [個人博客](http://dandanlove.com/) 和公共號:
- 寫在前面的話
- Java
- 基礎
- Double的比較
- 小數怎么用二進制表示
- 多線程
- 并發和并行
- 線程池
- 線程池背景
- 線程池構造
- 任務阻塞隊列
- Flutter
- 基礎知識
- Dart基礎
- Android
- 項目架構
- View
- 非UI線程更新View
- AlarmManager
- 對比postDelaryed和Timer
- Bitmap
- 加載100M的圖片卻不撐爆內存
- Bitmap壓縮
- Bitmap局部解碼
- 計算圖片的內存占用
- Android動畫
- Android動畫類型
- Android動畫原理
- 屬性動畫
- 幀動畫
- 補間動畫
- 使用動畫的注意事項
- Android新特性
- 權限組
- Android23(Marshmallow)-6.0
- Android24(Nougat)-7.0
- Android26(Oreo)-8.0
- Android28(Pie)-9.0
- Android29(Q)-10.0
- AndroidX遷移
- Kotlin
- 關鍵字
- Kotlin操作符
- CoroutineScope
- Flow
- CoroutineException