您好,登錄后才能下訂單哦!
小伙伴們,咱們今天咱繼續(xù)對(duì)Android8.0的適配進(jìn)行分解,今天將針對(duì)啟動(dòng)頁(yè),版本適配和系統(tǒng)限制等進(jìn)行“啃食”
1、啟動(dòng)頁(yè)適配
近日,我無(wú)意中發(fā)現(xiàn)應(yīng)用在8.0系統(tǒng)上面啟動(dòng)頁(yè)崩潰,趕緊去找BUG,運(yùn)行后發(fā)現(xiàn)如下異常:
翻譯后意思是:只有全屏不透明的activity才可以設(shè)置方向;
解決方案如下:
1.1、如果不考慮配置屏幕方向的話,直接將android:screenOrientation="portrait" 去掉即可;
1.2、如果既要固定屏幕方向,又解決啟動(dòng)過慢導(dǎo)致的白(黑)屏問題,那么可以找到你設(shè)置透明的Activity,然后在他的theme中將android:windowIsTranslucent改為false,再加入<item name="android:windowDisablePreview">true</item>;
1.3、參考Google給出的解決方案:不要禁用預(yù)覽窗口,而要遵循常見的 Material Design模式。您可以使用活動(dòng)的 windowBackground主題屬性為開始活動(dòng)提供簡(jiǎn)單的自定義繪圖.
2、8.0版本安裝適配
android 8.0系統(tǒng)更新之后,未知應(yīng)用安裝權(quán)限的開關(guān)被除掉,取而代之的是未知來源應(yīng)用的管理列表,需要用戶給予允許app安裝未知來源應(yīng)用的權(quán)限;
2.1、添加權(quán)限
<!--裝未知來源應(yīng)用的權(quán)限-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
2.2、然后在用戶點(diǎn)擊更新時(shí)判斷是否開啟了該應(yīng)用的“允許安裝未知來源”的權(quán)限,沒有的話,就引導(dǎo)用戶去開啟該應(yīng)用的“允許安裝未知來源”的權(quán)限
注意:此處如果自己實(shí)現(xiàn)版本更新,需配合通知渠道,進(jìn)行版本下載進(jìn)度顯示
3、運(yùn)行時(shí)權(quán)限策略變化
在 Android 8.0 之前,如果應(yīng)用在運(yùn)行時(shí)請(qǐng)求權(quán)限并且被授予該權(quán)限,系統(tǒng)會(huì)錯(cuò)誤地將屬于同一權(quán)限組并且在清單中注冊(cè)的其他權(quán)限也一起授予應(yīng)用,在8.0中此行為被糾正,系統(tǒng)只會(huì)授予應(yīng)用明確請(qǐng)求的權(quán)限;
同組權(quán)限一起申請(qǐng):
8.0中引入了多個(gè)與電話有關(guān)的新權(quán)限:
ANSWER_PHONE_CALLS 允許您的應(yīng)用通過編程方式接聽呼入電話。要在您的應(yīng)用中處理呼入電話,您可以使用 acceptRingingCall() 函數(shù)。
READ_PHONE_NUMBERS 權(quán)限允許您的應(yīng)用讀取設(shè)備中存儲(chǔ)的電話號(hào)碼。
這些權(quán)限均被劃分為危險(xiǎn)類別,屬于 PHONE 權(quán)限組。
1、后臺(tái)執(zhí)行限制
1.1、后臺(tái)服務(wù)限制:處于空閑狀態(tài)時(shí),應(yīng)用可以使用的后臺(tái)服務(wù)存在限制。 這些限制不適用于前臺(tái)服務(wù),因?yàn)榍芭_(tái)服務(wù)更容易引起用戶注意;
1.2、廣播限制:除了有限的例外情況,應(yīng)用無(wú)法使用清單注冊(cè)隱式廣播。 它們?nèi)匀豢梢栽谶\(yùn)行時(shí)注冊(cè)這些廣播,并且可以使用清單注冊(cè)專門針對(duì)它們的顯式廣播。
注意:默認(rèn)情況下,這些限制僅適用于針對(duì) O 的應(yīng)用。 不過,用戶可以從 Settings 屏幕為任意應(yīng)用啟用這些限制,即使應(yīng)用并不是以 O 為目標(biāo)平臺(tái)。
2、后臺(tái)服務(wù)限制
系統(tǒng)可以區(qū)分 前臺(tái) 和 后臺(tái) 應(yīng)用。 (用于服務(wù)限制目的的后臺(tái)定義與內(nèi)存管理使用的定義不同;一個(gè)應(yīng)用按照內(nèi)存管理的定義可能處于后臺(tái),但按照能夠啟動(dòng)服務(wù)的定義又處于前臺(tái)。)如果滿足以下任意條件,應(yīng)用將被視為處于前臺(tái):
具有可見 Activity(不管該 Activity 已啟動(dòng)還是已暫停)。
具有前臺(tái)服務(wù)。
另一個(gè)前臺(tái)應(yīng)用已關(guān)聯(lián)到該應(yīng)用(不管是通過綁定到其中一個(gè)服務(wù),還是通過使用其中一個(gè)內(nèi)容提供程序)。 例如,如果另一個(gè)應(yīng)用綁定到該應(yīng)用的服務(wù),那么該應(yīng)用處于前臺(tái):
IME
壁紙服務(wù)
通知偵聽器
語(yǔ)音或文本服務(wù)
如果以上條件均不滿足,應(yīng)用將被視為處于后臺(tái)。
后臺(tái)服務(wù)會(huì)被kill掉,官方推薦可使用AlarmManager、SyncAdapter、JobScheduler代替后臺(tái)服務(wù)。
3、廣播限制
如果應(yīng)用注冊(cè)為接收廣播,則在每次發(fā)送廣播時(shí),應(yīng)用的接收器都會(huì)消耗資源,在7.0中對(duì)廣播施加了一些限制,8.0 讓這些限制更為嚴(yán)格:
針對(duì) Android 8.0 的應(yīng)用無(wú)法繼續(xù)在其清單中為隱式廣播注冊(cè)廣播接收器;
應(yīng)用可以繼續(xù)在它們的清單中注冊(cè)顯式廣播;
應(yīng)用可以在運(yùn)行時(shí)使用 Context.registerReceiver() 為任意廣播(不管是隱式還是顯式)注冊(cè)接收器;
需要簽名權(quán)限的廣播不受此限制所限,因?yàn)檫@些廣播只會(huì)發(fā)送到使用相同證書簽名的應(yīng)用,而不是發(fā)送到設(shè)備上的所有應(yīng)用。
4、后臺(tái)位置限制
Android 8.0 都會(huì)對(duì)后臺(tái)應(yīng)用檢索用戶當(dāng)前位置的頻率進(jìn)行限制(會(huì)出現(xiàn)后臺(tái)應(yīng)用定位收不到定位信息);
(注:以上內(nèi)容引自Google中國(guó)開發(fā)者網(wǎng)站:https://developer.android.google.cn)
新系統(tǒng)在手,還需多多了解其中的變化,以我們自身的能力來解決實(shí)際開發(fā)過程中的問題,各位小伙伴,你們的應(yīng)用在適配8.0的過程中遇到了哪些問題,歡迎留言,共同探討并解決。如文中有誤,請(qǐng)留言指出.
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。