值得你關注的Android8.0(Android O)上的重要變化

來源:互聯網
上載者:User

標籤:官方文檔   launcher   locale   collect   不同   文檔   views   集合排序   新功能   

剛適配完Android7.0還沒多久,就看到Google官方推出的Android8.0(Android O)的開發人員預覽版新聞,我的心情你可以好好想想。對於上層應用開發人員的我來說,適配新版本的工作還好,而有JNI且有很多深層修改的人來說則是痛苦的。那麼這一次的大版本更新,最終何時定型發布?她都帶來了哪些新的限制與變化,對我們已有的應用有何影響?新增了什麼特性,能否利用起來增加新奇有趣的功能呢?

本文在整理官方的Preview文檔同時,運行部分範例程式碼,為各位一一展現。如果你英文還不錯,時間也充裕,文末有官方文檔連結,供你親自琢磨和體驗。

Android O完善計劃與發布時間

Google在2017年3月21日首次推送Android O開發人員預覽版,那接下來的更新和到Android O真正穩定,最終發布是在何時呢?借用官方文檔的時間軸圖:

從上能夠看出,此次發布的DP1(開發人員預覽版)的更新版本DP2在五到六月份之間,而DP1和DP2都主要面向開發人員,發現相容性問題,體驗反饋新特性,此時的系統鏡像自身還有很多穩定性問題,還不適合日常使用;

DP3、DP4已經到七月份,提供了最終的API和官方SDK,在此基礎上可以做完整的相容性測試和基於新特性開發新功能。最終的Android O版本發布則定在了第三季度。

根據以往的經驗,第三季度到年底才陸續有舊裝置的OTA升級,而到國內的新機發布和舊裝置的升級則持續到了第二年的三四月份。因此,從最後的發布時間看,現在是可以先鬆口氣。但是很多實際情況是很早的完成了Google親兒子手機的適配工作,而國內手機廠商又大肆修改,帶來其他很多不確定性。所以還是早做準備,心裡有數,畢竟早起的鳥兒有蟲吃。

新的限制與變化

Android新版本的限制與變化主要分成兩方面,一是影響所有app的,二是影響面向新版本app的(主要是targetSdkVersion指向新版本)。後者的適配還好,一般的應用不會非常快的修改targetSdkVersion;而前者是實實在在的需要立即著手跟進的。

影響所有應用的:

1.後台限制

(1)後台運行限制

  • 當應用進入到後台,沒有可見且啟動並執行組件(如後台Service),系統會釋放應用所持有的喚醒鎖(wakelock)

  • 使用 NotificationManager.startServiceInForeground()方法啟用foreground Service,舊方法不再有效

(2)後台位置擷取限制
在Android O系統上,後台啟動並執行應用,不再能頻繁的收到位置更新的資訊;但具體更新頻次減少到多少,還需要最重版發布後測試確定

2.安全相關的變化

(1)平台不再支援SSLv3
(2)HttpsURLConnection在HTTPS連結建立時,不再自動切換到早期TLS協議版本重試
(3)應用的WebView執行個體,將運行在獨立的進程中

3.隱私權原則變化

(1)ANDROID_ID 不再是裝置中所有應用共用的,而是每個應用擷取到的都不一樣,而且以包名和簽名作為區分;卸載後重新安裝也不會發生變化;但是手機恢復出廠預設值後,應該和上一次的不再一致

(2)擷取系統屬性net.hostname,將得到null

4.應用捷徑變化
以com.android.launcher.action.INSTALL_SHORTCUT廣播方式建立捷徑不再有效,而要使用 ShortcutManager的 requestPinShortcut()方法。

5.Alert Window顯示變化
在聲明SYSTEM_ALERT_WINDOW 許可權後,選擇使用TYPE_SYSTEM_ALERT等來使彈窗顯示在其他應用之上;在Android O系統上都將顯示在TYPE_APPLICATION_OVERLAY類型的視窗之下。而targetSdkVersion為android O的應用直接使用TYPE_APPLICATION_OVERLAY顯示Alter Window。這樣你的彈框可能還是在別人的彈窗之下。

6.其他
(1)藍芽:ScanRecord.getBytes()方法變化
(2)鍵盤導航:使應用支援實體鍵盤導航(以前就有,只是重新提一下)
(3)網路連接及HTTPS相關:在connect失敗之後,調用send(DatagramPacket)會拋出SocketException,以及其他一些細節的變化
(4)當集合為空白時,AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 將拋出 NullPointerException
(5)本地化與國際化:如Currency.getDisplayName()等方法預設調用 Locale.getDefault(Category.DISPLAY),預設時區的解析等
(6)連絡人統計資料:不再提供連絡人郵件或電話準確的聯絡過的次數資訊,而是僅提供近似值

影響面向android O應用的:

1.後台限制
(1)startService() 將拋出 IllegalStateException
(2)限制在AndroidManifest.xml中註冊接收隱式廣播,如ACTION_PACKAGE_REPLACED ,但也有些例外如ACTION_BOOT_COMPLETED,ACTION_LOCALE_CHANGED(所有例外參考文末串連)。(注意此部分限制都是只針對targetSdkVersion為android O,或者編譯的SDK為android O及以上的的,低於的則不受影響)

2.隱私相關變化
(1)擷取系統屬性net.dns1、net.dns2、net.dns3 和 net.dns4不再可用
(2)不再支援 Build.SERIAL,而改為 Build.getSerial()

3.本地庫變化
在Android O上強制要求Segment不能同時具備寫和可執行,如資料區段不可執行,程式碼片段不可寫。

4.ContentProvider的變更通知
調用 ContentResolver.notifyChange()和registerContentObserver(Uri, boolean, ContentObserver) 實現通知和監聽某些Uri上的變化,在Android O上則要求uri對應的ContentProvider要正確定義,但是沒有定義會有怎樣的問題並沒有提及

5.其他
Alter Window的顯示,集合排序方法的變化和擷取使用者帳號許可權變化等。

新的特性

在寫本文時,Google官方已推出部分中文文檔(應該很快會全部更新),鑒於此,本處僅展示下有趣且具有範例程式碼的多頻道(Channel)的通知、畫中畫和自動填滿架構

1.多頻道通知
我的理解是將應用發出的通知進行細化,劃分成不同的類別,就像電視的一個個頻道,可以針對頻道進行操作。如使用者可以屏蔽某個頻道的通知,而不是這個應用的所有通知訊息;開發人員可以針對頻道設定通知的震動、聲音等。

通知顯示和原來沒有大的區別,如所示:

在設定中可以看到針對某個頻道通知進行控制

2.畫中畫(Picture In Picture)
Activity的顯示多了一種方式,只要在AndroidManifest.xml中設定android:supportsPictureInPicture為true即可,實現如顯示效果:

注意,處在畫中畫模式中的Activity會回調onPause方法,因此像播放視頻類的應用,不要在onPause中停止播放,而是在onStop方法中停止。

3.自動填滿架構(AutofillFramework)
簡單分為提供自動填滿服務的應用和使用自動填滿功能的應用。前者通過繼承AutoFillService解析介面上的view結構提供自動填滿和儲存資料的能力,後者在標準View上不做修改就能使用此服務,而自訂View還得做些處理才行。可是提供自動填滿服務的應用需要取得信任,還要做很多額外的事情,後續推廣不知能否推開。

本來修改了測試Demo可以在通知欄Demo中使用自動填滿的功能,結果系統不穩定,已經無法在任何頁面顯示自動填滿的彈窗,而且還出現幾次死機,因此沒有。

如何體驗到Android O

把手中的裝置刷到Android O的操作步驟很簡單,首先尋找手上的裝置是否有支援Android O預覽版的機型
Nexus 5X
Nexus 6P
Nexus Player
Pixel C
Pixel
Pixel XL

我使用的是Nexus 6P,具體步驟如下:官網連結

1.下載到對應ZIP包
解壓,目錄中包含了flash-all.sh

2.USB串連手機
確保可調用adb命令,即在環境變數中設定好adb命令的路徑

3.進入fastboot模式
adb reboot bootloader
(沒有採用按鍵方式進入)

4.解鎖bootloader
嘗試使用fastboot flashing unlock或者fastboot oem unlock,本人手機已經解鎖過,因此沒有使用

5.刷入新系統
在終端命令列切到剛才解壓ZIP檔案後的目錄,即在flash-all.sh目錄;執行flash-all.sh(windows可使用flash-all.bat)。執行完畢之後即可進入Android O

6.鎖定bootloader
執行fastboot flashing lock或者fastboot oem lock,本人沒有執行

最後再次提醒,請以最後發布的官方文檔為準。而且此版本僅供開發人員體驗和測試反饋,不適合日常使用,避免不必要的麻煩。

轉載請註明出處:http://blog.csdn.net/w7849516230,歡迎關注公眾號“編程陽光”

1.Android O Preview官方說明
2.可以註冊的隱式廣播

值得你關注的Android8.0(Android O)上的重要變化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.