在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 關(guān)于Android N 開(kāi)發(fā)者預(yù)覽版的一些隨想
101 種讓你的網(wǎng)頁(yè)看起來(lái)更酷的方法
Android 項(xiàng)目是如何使用 Kotlin 語(yǔ)言生成的 1/2
Nimbledroid 版本更新
使用TypeScript提高開(kāi)發(fā)能力
利用 TensorFlow Serving 系統(tǒng)在生產(chǎn)環(huán)境中運(yùn)行模型
Google Play 榜單APP冷啟動(dòng)速度分析報(bào)告
使用微信控制電腦(Python 版)
jQuery 3 中的新變動(dòng)
RxAndroid 基礎(chǔ):第一部分
Swift in 2016
UI自動(dòng)化測(cè)試基于Activity的封裝模式
2016年,有哪些適合你學(xué)習(xí)的編程語(yǔ)言?
Swift 響應(yīng)式編程
如何組合使用 VIM 編輯器與 IPYthon
如何使你的app更加流暢
介紹用來(lái)選擇輪廓圖像的一個(gè)類——Will J Miller
關(guān)于Android N 開(kāi)發(fā)者預(yù)覽版的一些隨想

關(guān)于Android N 開(kāi)發(fā)者預(yù)覽版的一些隨想

譯者:李鑫

原文:Random Musings on the N Developer Preview

本文為極客學(xué)院Wiki組織翻譯,轉(zhuǎn)載請(qǐng)注明出處。

時(shí)間:2016.3.21

每當(dāng)谷歌發(fā)布新的開(kāi)發(fā)者預(yù)覽版時(shí),我都會(huì)在 API 差異報(bào)告和高級(jí)別概述查找一番,看看是否存在一些值得開(kāi)發(fā)者更多關(guān)注的東西,重點(diǎn)查找一些開(kāi)發(fā)者可能都會(huì)使用的主流特性。我也會(huì)特別留意一些關(guān)注度可能不是很高的東西,因?yàn)橛行〇|西都已經(jīng)淹沒(méi)在 Java 文檔中了。

這次發(fā)布的 N 有點(diǎn)像冰山一角。概要中所展示的內(nèi)容雖然有趣,但到正式版發(fā)布之時(shí),改動(dòng)可能會(huì)非常多。這種情況可能跟轉(zhuǎn)換到 OpenJDK 有點(diǎn)關(guān)系,詳情請(qǐng)參看我之前的隨筆。

現(xiàn)在就應(yīng)著手研究的特性

  • 多窗口功能的支持將在短期內(nèi)獲得很多媒體的關(guān)注。多窗口支持是板上釘釘?shù)牧?/strong>。除非 targetSdkVersion 為 N(今天,可能最終是 24)并且你特別聲明不想讓 activity 被調(diào)整尺寸,否則你的應(yīng)用將一定能被用戶調(diào)整尺寸。這里還有一些例外情況,尤其是能夠通過(guò) screenOrientation 修改原始方位的 activity。但總的來(lái)說(shuō),不管喜歡與否,activity 將來(lái)都可以被調(diào)整尺寸。而且,用戶也希望能夠調(diào)整你的 activity 的尺寸。綜合各種形式的因素考慮,這一特性大概應(yīng)盡早地經(jīng)常進(jìn)行測(cè)試。

  • 安卓準(zhǔn)備進(jìn)入桌面市場(chǎng)的消息已經(jīng)不是新聞了。多窗口支持明顯就是為了桌面方式應(yīng)用而設(shè)計(jì)的。盡管現(xiàn)在的媒體可能更為關(guān)注分屏模式,但我猜到了五月底,媒體的關(guān)注焦點(diǎn)將是“自由形態(tài)”(freeform)模式(大型設(shè)備制造商將能選擇啟用“自由形態(tài)”模式,從而使用戶自由地定義每個(gè) activity 的尺寸)。按照谷歌對(duì)該模式的闡述,很可能是針對(duì)窗口化桌面應(yīng)用。但我考慮,除了多窗口支持之外,以下改動(dòng)確實(shí)標(biāo)志著安卓將開(kāi)始進(jìn)入桌面領(lǐng)域:

    • 現(xiàn)在可以對(duì)剪切、復(fù)制、粘貼以及 Activity 中的 onProvideKeyboardShortcuts() 指定專用的鍵碼,暗示將更為關(guān)注硬件的鍵盤(pán)輸入功能。

    • 現(xiàn)在有了 PointerIcon,以及 View 中的指針捕獲鉤子,暗示將更為關(guān)注鼠標(biāo)/觸控板的輸入功能。

    • 現(xiàn)在出現(xiàn)了 FEATURE_ETHERNET,以及大概會(huì)有的對(duì)應(yīng)的 <uses-feature> 選項(xiàng),暗示將更多關(guān)注硬連線的網(wǎng)絡(luò)連接。
  • Android 6.0 引入了 Doze (瞌睡)模式,這曾讓一些開(kāi)發(fā)者感到非常吃驚。那時(shí),該模式被限制用于靜止?fàn)顟B(tài)的設(shè)備中(比如晚上放在了床頭幾上)。到了 Android N 時(shí)代,只要設(shè)備不處于充電狀態(tài),隨時(shí)都可以啟用 Doze 模式——即使設(shè)備處于移動(dòng)狀態(tài)。這一模式改變的不是應(yīng)用的行為,而是應(yīng)用受此影響的程度,另外一個(gè)值得注意的問(wèn)題是,該模式可能會(huì)觸發(fā)用戶支持問(wèn)題的頻率。

  • 多語(yǔ)言環(huán)境支持也使得資源協(xié)議變得更為復(fù)雜。需要你更多地關(guān)注對(duì)語(yǔ)系的完整翻譯,而不能是部分的。如果有些語(yǔ)系丟失了一個(gè)字符串,用戶設(shè)備就可能馬上在默認(rèn)的資源集中(如res/values/strings.xml)用隨便一個(gè)字符串來(lái)代替它。在 N 中,用戶可能從次級(jí)語(yǔ)言環(huán)境中獲取字符串。如果在翻譯集中出現(xiàn)的漏洞足夠多的話,那么用戶設(shè)備屏幕上顯示的語(yǔ)言就會(huì)完全不同了。一定要確保翻譯的完整性,無(wú)論是引入翻譯,還是添加面向用戶字符串時(shí)。

  • 還是跟多語(yǔ)言環(huán)境支持有關(guān),如果你的應(yīng)用設(shè)置會(huì)覆蓋用戶設(shè)備所用的語(yǔ)言環(huán)境,那么在使用 N 時(shí)請(qǐng)全面測(cè)試。

  • 據(jù)數(shù)據(jù)流量節(jié)省功能(Data Saver)文檔顯示,應(yīng)用需要“對(duì)于后臺(tái)數(shù)據(jù)使用上的限制,要恰當(dāng)?shù)靥幚怼?。?duì)此我理解為,數(shù)據(jù)流量節(jié)省功能有點(diǎn)像是應(yīng)用備用功能,除非用戶主動(dòng)使用應(yīng)用,否則訪問(wèn)互聯(lián)網(wǎng)功能受限。這一功能同樣也需要全面測(cè)試才行。

  • 你可能會(huì)忍不住使用 ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS 去引導(dǎo)用戶將應(yīng)用添加到 Data Saver 白名單中,以便可以正常進(jìn)行后臺(tái)網(wǎng)絡(luò)訪問(wèn)。但請(qǐng)記住,谷歌也有類似的電池電量白名單……如果使用那個(gè)行為,將使得應(yīng)用被 Play Store 封殺。目前還沒(méi)有 Data Saver 白名單的相關(guān)文檔說(shuō)明……但是,再說(shuō)一句,在Android 6.0 發(fā)布前,對(duì)于進(jìn)入電池電量節(jié)省白名單的請(qǐng)求,谷歌方面也沒(méi)有明說(shuō)會(huì)封殺應(yīng)用。

  • 總體來(lái)說(shuō),網(wǎng)絡(luò)安全配置可以很有效地保護(hù)你的應(yīng)用。開(kāi)發(fā)者們收到的有關(guān)介紹失效 X509TrustManager 實(shí)現(xiàn)的郵件中涉及到了一個(gè)有用的副作用。其中一些失效的TrustManager 實(shí)現(xiàn)已經(jīng)跟使用自簽名證書(shū)關(guān)聯(lián)到一起了。現(xiàn)在,你可以使用調(diào)試-重寫(xiě)來(lái)允許應(yīng)用使用自簽名證書(shū)。如果我沒(méi)理解錯(cuò)的話,這意味著可以在需要時(shí)(比如測(cè)試服務(wù)器)光明正大地使用自簽名證書(shū),而不用再冒險(xiǎn)在產(chǎn)品發(fā)布時(shí)支持這種證書(shū)。

  • 所有典型的 JUnit 測(cè)試用例基類都被棄用,比如 ActivityInstrumentationTestCase2ActivityTestCase。如果你還沒(méi)有這樣做,那么差不多會(huì)在明年轉(zhuǎn)變成 JUnit4 測(cè)試支持。

  • 目前有了一個(gè)新的 FileUriExposedException。如果使用 file: Uri 值就會(huì)拋出該異?!,F(xiàn)在還不完全清除何種情況下拋出。(2016-03-14 更新:如果使用 file:``Uri 值,則幾乎會(huì)拋出該異常)。StrictMode.VmPolicy.Builder 中的 penaltyDeathOnFileUriExposure() 據(jù)推測(cè)可能會(huì)觸發(fā)這個(gè)異常。但是,含混的措辭說(shuō)明,或許 N(以及 Android 的未來(lái)版本)會(huì)采用默認(rèn)拋出該異常的機(jī)制,就像拋出 NetworkOnMainThreadException 異常那樣。為了處理這個(gè)問(wèn)題:

    • 如果從第三方應(yīng)用中接受了 Uri 值,請(qǐng)做好對(duì) content: Uri 值的支持工作。不要犯傻地認(rèn)為這些值都來(lái)自 MediaStore 或具有能夠獲取的文件路徑。請(qǐng)使用 openInputStream()、getType() 以及帶有 ContentResolverOpenableColumns 來(lái)使用 Uri 標(biāo)識(shí)的內(nèi)容。

    • 如果將 Uri 值發(fā)送到其他應(yīng)用中(ACTION_VIEWACTION_SEND,等等),請(qǐng)繼續(xù)continue moving over to content: Uri 值。使用 FileProvider,也許也可以輔以 我的 LegacyCompatCursorWrapper (為了避免犯下前面提到的錯(cuò)誤)。最低限度也要將你創(chuàng)建這些 Uri 值的方法隔離到未來(lái)可能更容易切換到 content: Uri 值的位置下,以防止在生產(chǎn)環(huán)境下拋出 FileUriExposedException 異常。
  • 如果你在 BitmapFactory.Options 上使用 inPreferQualityOverSpeed,那么現(xiàn)在看來(lái),這已經(jīng)被廢棄了。相關(guān)文檔聲明,在 N 中標(biāo)志會(huì)被忽略,因?yàn)椤拜敵鰧⒁恢笔歉哔|(zhì)量的”。根據(jù)相關(guān)的報(bào)道,這種做法有點(diǎn)像是烏比岡湖效應(yīng),或者也可以說(shuō)是一直處于憤怒狀態(tài)的綠巨人

  • 如果你看過(guò) N 的 API 差異報(bào)告,可能會(huì)有點(diǎn)恐慌吧?興許會(huì)認(rèn)為谷歌去除了 Html 類中的 fromHtml()toHtml()。這似乎是 API 差異報(bào)告措辭中的一個(gè) Bug。那些方法還在。但確實(shí)由接受標(biāo)志參數(shù)的額外方法所補(bǔ)充進(jìn)來(lái)的,可以更好地解釋或生成 HTML。不過(guò),這反而說(shuō)明這一代碼經(jīng)過(guò)了徹底檢查,效果會(huì)非常出色。

  • 根據(jù) API 差異報(bào)告的描述,StringBuilder (以及遺留的 StringBuffer)不再實(shí)現(xiàn) Appendable。這似乎是報(bào)告中的一個(gè) Bug,因?yàn)閾?jù) Java 文檔顯示,它們依然能夠?qū)崿F(xiàn) Appendable。因?yàn)樵?Java 8 中它們能夠?qū)崿F(xiàn) Appendable,所以這些類的安卓版本應(yīng)該也能繼續(xù)實(shí)現(xiàn) Appendable。

另外一些優(yōu)點(diǎn)(對(duì)優(yōu)點(diǎn)的另類解讀)

  • 谷歌繼續(xù)在堆加更多的存儲(chǔ)選項(xiàng),這次使用的是 ACTION_OPEN_EXTERNAL_DIRECTORYandroid.os.storage.StorageVolume。據(jù)我所知,這一做法是為了避免 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE,并可能會(huì)通過(guò)請(qǐng)求用戶授予長(zhǎng)期細(xì)粒度的許可,來(lái)允許直接訪問(wèn)更多的可移動(dòng)存儲(chǔ)。聽(tīng)上去有點(diǎn)合理。但是,很多開(kāi)發(fā)者依舊還在學(xué)習(xí)使用 Android 4.4 所引入的存儲(chǔ)訪問(wèn)架構(gòu)( Storage Access Framework),以及在可移動(dòng)存儲(chǔ)上采取同步限制。更為讓人困擾的是,預(yù)覽版中的 “進(jìn)一步的詳細(xì)信息”(“For more information”)鏈接是空的。

2016-03-10 更新: Ian Lake 指出,“scoped directory access” 文檔已經(jīng)不再更新了

  • android.auditing.SecurityLog 似乎非常有意思(可以記錄 adb shell 命令等)。

  • AlarmManager 現(xiàn)在具有進(jìn)程內(nèi)的警告。set()、setExact()setWindow() 都能接受 OnAlarmListener,并能在時(shí)機(jī)到來(lái)時(shí),在其上調(diào)用一個(gè)回調(diào)函數(shù)。

  • 現(xiàn)在有了 commitNow() 選項(xiàng),執(zhí)行同步的 FragmentTransaction,而commit() 則是異步的。

  • android.webkit 包有了 ServiceWorker相關(guān)類

  • WebSettings 有了 setDisabledActionModeMenuItems(),說(shuō)明可以限制一些標(biāo)準(zhǔn)的剪切/復(fù)制/粘貼操作。如果不打算讓這些操作干擾所要渲染的 Web 內(nèi)容,那么這個(gè)參數(shù)就非常有用了。

  • WebViewClient 上的 shouldOverrideUrlLoading(WebView, String)被廢棄,取而代之的是shouldOverrideUrlLoading(WebView, WebResourceRequest)

  • AbsSeekBar 支持刻度線,我猜測(cè)是很大程度受益于 SeekBar

  • Chronometer 支持倒數(shù)計(jì)秒模式,通過(guò) RemoteViews 包含在應(yīng)用小組件中。

未解之謎

Intent 有了 ACTION_PACKAGES_SUSPENDEDACTION_PACKAGES_UNSUSPENDED 這兩個(gè)行為。目前還不清楚這一上下文中的 suspended 究竟是什么意思。更新 2016-03-14:Andriy Petruk 指出這可能跟 Android for Work 項(xiàng)目有關(guān)。

Intent 中定義了一個(gè) ACTION_QUICK_VIEW,用來(lái)“快速查看 URI 或 URI 列表”。但這樣一種查看器的具體含義,以及是否能應(yīng)用一個(gè)查看器等問(wèn)題仍不可清楚,但我想具體的說(shuō)明也很快會(huì)出現(xiàn)。

還有,什么是 AutomaticZenRule?但我想 Phil Jackson 會(huì)贊成它。

目前很清楚的是,isolatedProcess 服務(wù)可以運(yùn)行在單獨(dú)的權(quán)限較少的進(jìn)程。N 提供了 externalService,它要與 isolatedProcess 配合起來(lái),能允許服務(wù)“在應(yīng)用包的調(diào)用過(guò)程中運(yùn)行”。但這里所說(shuō)的“在應(yīng)用包的調(diào)用過(guò)程中運(yùn)行”到底指的是存儲(chǔ),還是許可,還是其他的什么東西呢?

細(xì)思極恐

Android 將來(lái)的版本可能會(huì)不贊成使用額外的隱式廣播,以及未綁定的后臺(tái)服務(wù)?;谶@種猜測(cè),應(yīng)避免或去除用于隱式廣播的聲明清單接收器中的依賴,同樣后臺(tái)服務(wù)也應(yīng)如此。

這一想法來(lái)源于在對(duì) CONNECTIVITY_ACTION 改變(不能再在清單中注冊(cè)它了)的討論過(guò)程中。

谷歌可能將更多的隱式廣播轉(zhuǎn)移到了 registerReceiver()-only bucket does not surprise me. 在某種程度上,我吃驚的是他們沒(méi)有及時(shí)針對(duì)這一點(diǎn)進(jìn)行更多的修改。

讓我吃驚的是,未綁定服務(wù)可能失去支持了。

如果他們說(shuō)棄用了 FLAG_START_STICKY,我還可以理解。或者更精確地說(shuō),如果他們認(rèn)為帶有服務(wù)的進(jìn)程可能更快地被終止,我也可以理解。

IntentService 和服務(wù)的其他命令模式用法全部去除,在我看來(lái)是有點(diǎn)過(guò)頭了。 很顯然,他們想讓開(kāi)發(fā)者把所有的后臺(tái)作業(yè)都塞進(jìn)各個(gè)分散的類別中,利用專門(mén)的服務(wù)子類(比如JobScheduler),以此來(lái)達(dá)成控制電池電量和內(nèi)存消耗的目的。

我對(duì)這一做法的前途深表?yè)?dān)心。

What Now?

我猜 2016 年 8 月可能會(huì)發(fā)布一個(gè)版本,上下不超過(guò)一個(gè)月吧。開(kāi)發(fā)者預(yù)覽版都比以前提早了幾個(gè)月,同樣,8 月也比一般發(fā)布新的主流 Andorid 版本的時(shí)間要早幾個(gè)月了。

另一本書(shū)的更新內(nèi)容中將開(kāi)始介紹 N 開(kāi)發(fā)者預(yù)覽版,本月晚些時(shí)候?qū)⒂枰怨肌?/p>

— 2016 年 3 月 9 日 Tweet