Android O 是下一代 android? 系統(tǒng),Android O Developer Preview 計(jì)劃將為開發(fā)者提供針對(duì)下一個(gè)版本的 Android 系統(tǒng)提升您應(yīng)用的兼容性和開發(fā)應(yīng)用所需的所有功能篮撑。該軟件是免費(fèi)的开镣,只需下載預(yù)覽版工具使用即可。
附錄官網(wǎng)計(jì)劃預(yù)覽:https://developer.android.com/preview/overview.html#timeline 咽扇,可查看有關(guān)該計(jì)劃的介紹邪财。
有關(guān)android O 的一些行為變更官網(wǎng)地址:https://developer.android.com/preview/behavior-changes.html
以下主要介紹一下androd O 中關(guān)于后臺(tái)執(zhí)行限制變更。
后臺(tái)執(zhí)行限制
每當(dāng)應(yīng)用程序在后臺(tái)運(yùn)行時(shí)质欲,它會(huì)消耗某些設(shè)備的有限資源树埠,如RAM。這可能會(huì)影響用戶的使用體驗(yàn)嘶伟,特別是如果用戶正在使用資源密集型應(yīng)用程序怎憋,例如玩游戲或觀看視頻。為了改善用戶體驗(yàn)绊袋,Android O在后臺(tái)運(yùn)行時(shí)對(duì)應(yīng)用程序可以執(zhí)行的操作施加限制毕匀。
-OverView
Android系統(tǒng)中的許多應(yīng)用和服務(wù)可以同時(shí)運(yùn)行。例如癌别,用戶可以在一個(gè)窗口中玩游戲皂岔,同時(shí)在另一個(gè)窗口中瀏覽網(wǎng)頁(yè),在另一應(yīng)用中播放音樂展姐。一次運(yùn)行的應(yīng)用程序越多躁垛,系統(tǒng)上的負(fù)載就越多。如果其他應(yīng)用程序或服務(wù)在后臺(tái)運(yùn)行圾笨,則會(huì)在系統(tǒng)上增加額外的負(fù)載教馆,可能音樂應(yīng)用程序會(huì)突然關(guān)閉,這會(huì)導(dǎo)致用戶體驗(yàn)不佳;
為了降低這些問題的機(jī)會(huì)擂达,Android O對(duì)用戶不直接與他們進(jìn)行交互的應(yīng)用程序可以執(zhí)行哪些操作土铺。應(yīng)用程式有兩種限制:
后臺(tái)服務(wù)限制:當(dāng)應(yīng)用程序空閑時(shí),使用后臺(tái)服務(wù)有限制板鬓。這不適用于對(duì)用戶更為重要的前臺(tái)服務(wù)舒憾。
廣播限制:除了有限的例外,應(yīng)用程序不能使用其清單來注冊(cè)隱式廣播穗熬。他們?nèi)匀豢梢栽谶\(yùn)行時(shí)注冊(cè)這些廣播镀迂,他們可以使用清單來注冊(cè)針對(duì)他們的應(yīng)用的明確的廣播。
注意:默認(rèn)情況下唤蔗,這些限制僅適用于以 Android O 為目標(biāo)的應(yīng)用探遵。但是,即使該應(yīng)用尚未定位到Android O妓柜,用戶也可以從“設(shè)置”界面為任何應(yīng)用啟用這些限制箱季。
在大多數(shù)情況下,應(yīng)用程序可以通過使用?JobScheduler?作業(yè)解決這些限制棍掐。該方法允許應(yīng)用程序安排在應(yīng)用程序沒有正常運(yùn)行時(shí)執(zhí)行工作藏雏,但仍然給予系統(tǒng)以不影響用戶體驗(yàn)的方式安排這些作業(yè)的余地。Android O提供了一些改進(jìn)JobScheduler作煌,可以更輕松地用計(jì)劃的作業(yè)來替換服務(wù)和廣播接收器;
-后臺(tái)服務(wù)限制
在后臺(tái)運(yùn)行的服務(wù)可能會(huì)消耗設(shè)備資源掘殴,這也會(huì)導(dǎo)致更用戶體驗(yàn)。為了減輕此問題粟誓,系統(tǒng)對(duì)服務(wù)應(yīng)用了一些限制奏寨。
系統(tǒng)區(qū)分?前臺(tái)?和?后臺(tái)?應(yīng)用程序。(為了服務(wù)限制的目的鹰服,背景的定義與內(nèi)存管理所使用的定義不同;一個(gè)應(yīng)用程序可能在內(nèi)存管理方面屬于后臺(tái)病瞳,但在前臺(tái)涉及其啟動(dòng)服務(wù)的能力揽咕。)符合一下條件之一的應(yīng)用程序會(huì)被認(rèn)為是在前臺(tái):
1有一個(gè)可見的活動(dòng)套菜,無論活動(dòng)是啟動(dòng)還是暫停亲善。
2有一個(gè)前臺(tái)服務(wù)逗柴。
∮纪贰3另一個(gè)前臺(tái)應(yīng)用程序通過綁定到其中一個(gè)服務(wù)或通過使用其內(nèi)容提供者之一連接到應(yīng)用程序。如以下處于前臺(tái)的應(yīng)用程序:
●?IME
● Wallpaper service
● Notification listener
● Voice or text service
不符合以上條件嚎于,應(yīng)用程序則被認(rèn)為是在后臺(tái)。
注意:這些規(guī)則不會(huì)以任何方式影響綁定的服務(wù)挟冠。如果應(yīng)用程序定義了綁定的服務(wù)于购,則其他組件可以綁定到該服務(wù),無論您的應(yīng)用程序是否在前臺(tái)知染。
當(dāng)應(yīng)用程序處于前臺(tái)時(shí)肋僧,它可以自由創(chuàng)建和運(yùn)行前臺(tái)和后臺(tái)服務(wù)。當(dāng)應(yīng)用程序進(jìn)入后臺(tái)時(shí)控淡,它有一個(gè)幾分鐘的窗口嫌吠,它仍然允許創(chuàng)建和使用服務(wù)。在該窗口的最后掺炭,該應(yīng)用被認(rèn)為是空閑的辫诅。在這個(gè)時(shí)候,系統(tǒng)會(huì)停止應(yīng)用的后臺(tái)服務(wù)涧狮,就像應(yīng)用程序調(diào)用了服務(wù)的Service.stopSelf()方法一樣炕矮。
在許多情況下,您的應(yīng)用程序可以使用?JobScheduler?作業(yè)替換后臺(tái)服務(wù)者冤。例如肤视,CoolPhotoApp 需要檢查用戶是否收到了來自朋友的共享照片,即使應(yīng)用程序未在前臺(tái)運(yùn)行涉枫。以前邢滑,該應(yīng)用程序使用后臺(tái)服務(wù)來檢查應(yīng)用程序的云存儲(chǔ)。要遷移到Android O愿汰,開發(fā)人員可以使用定期啟動(dòng)的計(jì)劃作業(yè)來替換后臺(tái)服務(wù)困后,定期啟動(dòng),查詢服務(wù)器衬廷,然后退出操灿。
在Android O之前,創(chuàng)建前臺(tái)服務(wù)的通常方法是創(chuàng)建后臺(tái)服務(wù)泵督,然后將該服務(wù)提升到前臺(tái)趾盐。但在Android O ?中,系統(tǒng)不允許后臺(tái)應(yīng)用創(chuàng)建后臺(tái)服務(wù)。因此救鲤,Android O引入了 Context.startForegroundService() 在前臺(tái)啟動(dòng)新服務(wù)的新方法久窟。系統(tǒng)創(chuàng)建服務(wù)后,應(yīng)用程序有五秒鐘可以調(diào)用該服務(wù)的?startForeground()?方法來顯示一個(gè)用戶可見的有關(guān)該服務(wù)的通知本缠。如果該應(yīng)用在時(shí)間限制內(nèi)沒有?startForeground()斥扛,系統(tǒng)將停止該服務(wù)并聲明該應(yīng)用為ANR。
-廣播限制
如果應(yīng)用程序注冊(cè)接收廣播丹锹,則應(yīng)用程序的接收方在每次發(fā)送廣播時(shí)都會(huì)消耗資源稀颁。如果太多的應(yīng)用程序注冊(cè)以基于系統(tǒng)事件接收廣播,觸發(fā)廣播的系統(tǒng)事件可能導(dǎo)致所有這些應(yīng)用程序快速連續(xù)地消耗資源楣黍,從而削弱用戶體驗(yàn)匾灶。為了減輕這個(gè)問題,Android 7.0(API 25級(jí))對(duì)廣播進(jìn)行了限制租漂,如背景優(yōu)化所述阶女。Android O使這些限制更加嚴(yán)格。
針對(duì)Android O的應(yīng)用程序不能再在其 manifest 文件中注冊(cè)隱式廣播接收器哩治。一個(gè)隱式廣播 是沒有指定一個(gè)專門的應(yīng)用程序的廣播秃踩。例如,ACTION_PACKAGE_REPLACED是一個(gè)隱式廣播业筏,因?yàn)樗话l(fā)送到所有注冊(cè)的監(jiān)聽器憔杨,讓他們知道設(shè)備上的某些包被替換。然而蒜胖,ACTION_MY_PACKAGE_REPLACED這不是一個(gè)隱含的廣播芍秆,因?yàn)樗话l(fā)送到包被被替換的應(yīng)用程序,無論有多少其他應(yīng)用程序已經(jīng)注冊(cè)了該廣播的監(jiān)聽器翠勉。
應(yīng)用程序可以繼續(xù)在其清單中注冊(cè)顯式廣播妖啥。
應(yīng)用程序可以Context.registerReceiver()在運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)接收器進(jìn)行任何廣播,無論是隱式還是顯式对碌。
需要簽名許可的廣播將免除此限制荆虱,因?yàn)檫@些廣播僅發(fā)送到使用相同證書簽署的應(yīng)用程序,而不是設(shè)備上的所有應(yīng)用程序朽们。
在許多情況下怀读,以前注冊(cè)為隱式廣播的應(yīng)用程序可以通過使用JobScheduler作業(yè)獲得類似的功能。例如骑脱,社交照片應(yīng)用程序可能需要不時(shí)對(duì)其數(shù)據(jù)執(zhí)行清理菜枷,并且在設(shè)備連接到充電器時(shí)更喜歡這樣做。以前叁丧,應(yīng)用程序ACTION_POWER_CONNECTED在其 manifest 文件中注冊(cè)了一個(gè)接收器;當(dāng)應(yīng)用程序收到廣播時(shí)啤誊,它會(huì)檢查是否需要清理岳瞭。為了遷移應(yīng)用到Android O,需在應(yīng)用程序的 manifest 文件中刪除該接收器蚊锹,而應(yīng)用程序會(huì)自己調(diào)度瞳筏,在設(shè)備空閑并充電時(shí)運(yùn)行的清理作業(yè)。
注意:現(xiàn)在許多隱性廣播不受此限制牡昆。應(yīng)用程序可以繼續(xù)在其manifest 文件中注冊(cè)這些廣播的接收者姚炕,無論應(yīng)用程序的API級(jí)別如何。有關(guān)免除廣播的列表丢烘,請(qǐng)參閱隱式廣播例外柱宦。