日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 8.0 移除静态注册广播

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 8.0 移除静态注册广播 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android O 前瞻 - 是時候和 Implict Broadcast 說再見了

Hevin 5 個月前 簡評:果然省電是 Android O 的第一任務。

日前,Android O 預覽版已經發布,這里就來介紹下 Android O 中對 Broadcast 的改變。

Android O 對于系統廣播(Broadcast)的改變歸根結底都是為了進一步的節省功耗。Google 在 Android Marshmallo (6.0, API level 23) 中引入了 Doze and App Standby 來改進 Android 系統的電池表現。

Doze 限制所有的應用程序在特殊的時間窗口中執行耗電任務,而 App Standby 會限制最少使用 App 的網絡活動。同時 Google 開始建議開發者使用 JobScheduler 來安排所有的后臺任務。

在 Android Nougat (7.0) 中,Google 移除了三項隱式廣播(Implict Broadcast)(CONNECTIVITY_ACTION, ACTION_NEW_PICTURE, ACTION_NEW_VIDEO),而在 Android O 中除了這里列出的,其余所有的隱式廣播都被移除了。

Google 認為應用程序在其 manifest 中注冊了太多沒必要的 BraodcastReceiver,導致了不必要的耗電。比如,很多的應用和第三方 SDK 都會監聽 CONNECTIVITY_ACTION 廣播。當你離開家,斷開了家里的 wifi。Android 發送 CONNECTIVITY_ACTION 廣播,結果幾乎所有的應用都會被喚醒并對此作出反應。

并且,因為 wifi 不再可用,手機會連接上移動網絡,廣播又會發送一遍,回到家再連上 wifi,相同的事再次發生。

鑒于開發者們肯定更多的只是考慮自己的應用,你可以想象一下手機里的每個應用可能都會去監聽網絡狀態變更、是否拍攝了新照片、安裝了新應用、開始充電等等事件。因為這些 App 都在 AndroidManifest.xml 中注冊接收這些廣播,所以它們總是能被喚醒接收這些廣播,即使不在前臺,甚至沒有運行。Google 也意識到隱式廣播被濫用了,因此才會在 Android O 中清除了如此多的隱式廣播。

那在 Android O 中我們應該怎么做呢?

1. 確定哪些 Broadcast 是隱式(Implict)的

根據官方文檔,所有沒有直接和你應用相關的廣播都是隱式的。比如文檔中舉例的 ACTION_PACKAGE_REPLACED,會在每個新應用安裝時被廣播。因此,像 ACTION_MY_PACKAGE_REPLACED 這樣的就是顯式廣播(explicit Broadcast),因為其只會在你的應用更新時才會進行廣播。

絕大多數我們監聽的廣播都是隱式的。

2. 確定你的應用是否會被影響

這里列出的是沒有被移除的隱式廣播,也就是如果你的應用只是監聽了這些廣播的話,那么恭喜你,你的應用不需要改。

3. 如果應用確實監聽了這些被移除的隱式廣播,JobScheduler 來解救你

JobScheduler 完美適配 Doze 和 App Standby,可以根據定義的條件來執行任務,比如:

ComponentName myService = new ComponentName(this, MyService.class); JobInfo myJob = new JobInfo.Builder(myService).setRequiresCharging(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).setPersisted(true).build();JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(myJob);

不過,JobSchedular 只支持 Android API 21 及以上,如果你的應用需要支持以下版本的系統,官方建議可以使用 FirebaseJobDispatcher。

這里推薦可以用 Evernote 的 Android-Job。其能夠根據當前系統,當系統為 Marshmallow 及以上時使用 JobSchedular。當版本沒達到時,根據是否集成了 Google Play Service 來使用 GCMNetworkManager 或 AlarmManager。

結論

不要再監聽 Android 移除的隱式通知,使用 JobSchedular, FirebaseJobDispatcher 或 Android-Job 來實現相同的功能。

總結

以上是生活随笔為你收集整理的android 8.0 移除静态注册广播的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。