鵝廠專家詳解Android N適配要點 | 騰訊優測乾貨分享

1.Doze模式更加強大

該模式是在Android6.0中引入的,當用戶設備未插電源、處於靜止狀態屏幕關閉時,該模式會推遲CPU和網絡活動,從而增加電池壽命。

Android_N中對這種模式進行了加強,當設備處於充電狀態且屏幕已關閉一定時間後,設備會進入打盹模式並應用第一部分限制:關閉應用網絡訪問、推遲作業和同步。如果進入打盹模式後設備處於靜止狀態達到一定時間,系統則會對 PowerManager.WakeLockAlarmManager 鬧鈴、GPS Wi-Fi 掃描應用餘下的打盹限制。無論是應用部分還是全部打盹限制,系統都會喚醒設備以提供簡短的維護時間窗口,在此窗口期間,應用程序可以訪問網絡並執行任何被推遲的作業/同步。

 

這種情況倒也好辦,要麼就是讓用戶將自己的的應用加入白名單,

或則在代碼中使用Intent的方式跳轉到設置頁面,讓用戶去設置;

Google推薦我們使用Schedule的方式來管理我們的任務,我們可以設置讓這些任務在特定的時候纔去執行,比如將任務設置運行在充電或則無限制的時候運行,如下就是加入一個網絡無限制的任務:

wKioL1d7JRzwsPs5AACtv4DqQXU557.jpg

GoogleAPI 23中爲我們加入了一個新的Action,我們可以通過調用這個Action跳轉到指定頁面指導用戶設置白名單:

wKiom1d7JUrAjYu6AAC8WTmqNCU895.jpg

wKioL1d7JUqgX4XwAAA-79cLyAA566.jpg

Doze模式中還有一種Standby的模式,這個模式相對更嚴格,如果對於及時通信的軟件在未加入白名單的情況下,處於該模式不能收到及時的提示,必須從該模式恢復才能收到,因此需要特別注意,我們可以從google的官方文檔當中查到進入該模式的ADB指令:

wKiom1d7JXPQubtcAACb-kIibsc434.jpg

將第二條指令中的true改爲false即可恢復,這個便於開發和測試。

2.禁止一些廣播的行爲

在之前的Android系統中,我們開啓一個監聽事件的廣播後,程序在事件觸發的時候就會觸發我們的廣播,而且不值一個程序會收到通知,所以在Android_N中對CONNECTIVITY_ACTIONACTION_NEW_PICTUREACTION_NEW_VIDEO三個廣播進行了處理。

a) 面向 Android N 開發的應用不會收到 CONNECTIVITY_ACTION 廣播,即使它們已有清單條目來請求接受這些事件的通知。在前臺運行的應用如果使用 BroadcastReceiver 請求接收通知,則仍可以在主線程中偵聽 CONNECTIVITY_CHANGE

b) 應用無法發送或接收 ACTION_NEW_PICTURE ACTION_NEW_VIDEO 廣播。此項優化會影響所有應用,而不僅僅是面向 Android N 的應用。

未來的 Android 版本還可能會棄用其他隱式廣播以及未綁定的後臺服務。有鑑於此,您應避免依賴在清單文件中聲明的接收器來偵聽隱式廣播或刪除此依賴關係,以及避免或刪除對後臺服務的依賴關係。

3.權限機制的更改

Android N 做了一些權限更改,包括用戶帳戶權限和向外部存儲設備寫入信息的新權限,這些更改可能會影響您的應用。下面概要列出了預覽版中已發生更改的權限。
GET_ACCOUNTS(已棄用)
GET_ACCOUNTS 權限現已棄用。對於面向 Android N 的應用,系統將忽略此權限。

下面我們就來着重的談一談關於這個權限修改,從Android6.0開始Google引入了權限動態申請的機制,在之前的版本中,我們申請權限都是一次性在應用的Manifest文件中將我們程序所需要的權限,在用戶安裝App的時候一起向用戶申請,這樣會造成要麼用戶沒有仔細看就直接同意安裝了,爲後期帶來安全隱患,要麼用戶不同意應用程序無法安裝,但是對於一個app來說,可能有的權限不是我們必須的,因此GoogleAndroid6.0中就引入了動態申請權限的機制。

該機制面向於6.0以上的版本,並且在6.0中將targetVersion指定爲23,否者效果和之前的版本一樣。

我們就拿<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />這個向外部存儲卡進行寫操作的權限來舉例。

當我們需要向外部存儲卡進行寫操作的時候,我們需要遵循如下的步驟:

a).查詢是否具有該權限:

wKioL1d7JYSzLk3hAAA-wxQvO5Y973.jpg

這裏面需要注意的是,爲了向下兼容,ContextCompatActivityCompat的導入的是support.v4包下的

wKiom1d7JZ2Q77VSAABLvRX57ig032.jpg

hasPerMission就是查詢的返回值,如果返回true就表示我們已經具有了權限,可以直接進行操作,如果是false的話,我們就需要向用戶動態的申請寫的權限了,如下:

wKiom1d7JbCzKzKSAACyE-fzgSk681.jpg

全文鏈接:(體驗更佳~)

http://bbs.utest.qq.com/?p=760&uid=1a87084a012d4fe59dd416e3ce2228be


騰訊優測(http://utest.qq.com)是專業的移動雲測試平臺,提供【兼容性自動化測試】【雲手機】【漏洞檢測】等多維度測試服務。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章