Android 8 0後台執行限制

2021-07-31 18:14:26 字數 2795 閱讀 7612

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...