android o
對應用在後台執行時可以執行的操作施加了限制,稱為後台執行限制(
background execution limits
),這可以大大減少應用的記憶體使用和耗電量,提高使用者體驗。後台執行限制分為兩個部分:後台服務限制(
background service limitations
)、廣播限制(
broadcastlimitations
)。後台服務限制
如何才算是後台應用?除了下面情況外都是後台應用
1. 具有可見的
activity
2. 具有前台服務
3. 另乙個前台應用已關聯到該應用(通過
bindservice
或者使用該應用的
contentprovider)。
當應用處於後台時: 1.
在後台執行的服務在幾分鐘內會被
stop
掉(模擬器測試在
1分鐘左右後被
kill
掉)。在這段時間內,應用仍可以建立和使用服務。 2.
在應用處於後台幾分鐘後(模擬器測試
1分鐘左右),應用將不能再通過
startservice
建立後台服務,如果建立則丟擲以下異常
應用處於後台時,雖然不能通過
startservice
建立後台服務,但仍可以通過下面的方式建立前台服務。
noti.startserviceinforeground();
後台服務會被kill掉,官方推薦可使用alarmmanager、syncadapter、jobscheduler代替後台服務。
廣播限制
如果應用監聽一些系統廣播,當系統發出廣播時,很多應用都會被喚醒,這會導致所有應用快速地連續消耗資源,從而降低使用者體驗。其實,大部分應用都不會處理這個廣播,應用只是喚醒一下看看和自己是否有關,為了緩解這一問題,
android n
對一些廣播做出了限制:
1.targetsdkversion
為android n
(api level 24
)及以上的應用,如果應用在
androidmanifest.xml
中靜態註冊
connectivity_action
這個receiver
,應用將不能收到此廣播。如果應用使用
context.registerreceiver()
動態註冊
receiver
,應用仍可以收到這個廣播。 2.
執行在android n
及以上裝置的應用,無論是
targetsdkversion
是否是android n
,應用都不能傳送或者接收
action_new_picture
和action_new_video
這兩個廣播。 而
android o
執行了更為嚴格的限制。
1.動態註冊的receiver,可接收任何顯式和隱式廣播。
2.targetsdkversion
為android o
(api level 26
)及以上的應用,靜態註冊的
receiver
將不能收到隱式廣播,但可以收到顯式廣播。下面例子說明
清單檔案的receiver宣告
receiver類定義
public class testreceiver extends broadcastreceiver
}
①如果這樣傳送隱式廣播,receiver將接收不到廣播。
intent intent = new intent();
intent.setaction("com.test.example.testreceiver.action");
sendbroadcast(intent);
②如果這樣傳送顯式廣播,receiver仍可以接收到廣播
intent intent = new intent();
intent.setclassname("com.test.example.testreceiver", "com.test.example.testreceiver.testreceiver");
sendbroadcast(intent);
雖然靜態註冊的receiver不能接收隱式廣播,但google考慮到一些廣播也不頻繁發生,也有一些例外,對這些例外的靜態註冊的receiver,仍可接收隱式和顯式廣播。
action_locked_boot_completed、
action_boot_completed
action_user_initialize
action_timezone_changed
action_locale_changed
action_usb_accessory_attached
action_usb_accessory_detached
action_usb_device_attached
action_usb_device_detached
action_headset_plug……
詳情請參考
據google工程師透露,google的目標是充滿一次電,手機可用2~3天,這也可看到google在手機續航方面的努力。
android8 0適配工作
整個8.0適配,設計的部分包括6部分 我專案中的,其他的適配感覺並不會影響專案的執行 1 執行時許可權 2 通知notifaction適配 3 未知 apk安裝適配 4 後台執行限制 後台服務 5 懸浮框適配 6 集合的處理 abstractcollection使用限制 android6.0的執行時...
Android 8 0無法安裝apk
android 8.0系統比起以前的系統多了乙個安裝未知應用程式的許可權需求 如果我們要在8.0的系統上安裝apk,那麼我們必須獲得這個許可權.直接上 當前版本是否大於等於26 if build.version.sdk int build.version codes.o else override ...
Android 8 0 內部公升級失敗
1.在 androidmanifest 中 新增 以下許可權 2.在build.gradle 中 compilesdkversion 與 targetsdkversion 設定 26 即 8.0 compilesdkversion 26 buildtoolsversion 26.0.3 defaul...