Android 在 Google 开发者大会上发布了哪些更新? | Google 开发者大会 2018
有哪些新的 Android 系統(tǒng)特性
- Google Play 上的 targetVersion 要求
- 2018年8月 新應(yīng)用發(fā)布必須為26或者更高
- 2018年11月 升級(jí)現(xiàn)有應(yīng)用必須為26或者更高
- 2019年之后 新發(fā)布或者升級(jí)應(yīng)用必須為一年內(nèi)發(fā)布的 Android 版本
- 工信部已經(jīng)出臺(tái)相應(yīng)的政策,中國(guó)主流的應(yīng)用市場(chǎng)也已經(jīng)跟進(jìn)
- Google 提供了全新的 TargetVersion 升級(jí)指南,可以?huà)呙鑸D片中的二維碼獲得。
電量?jī)?yōu)化和后臺(tái)控制
Android 始終致力于電量?jī)?yōu)化和后臺(tái)控制,通過(guò)后臺(tái)控制程序進(jìn)程,優(yōu)化電量,進(jìn)而提升待機(jī)時(shí)間,來(lái)提升用戶(hù)體驗(yàn)。我們希望開(kāi)發(fā)者通過(guò)下圖中的要求,來(lái)測(cè)試自己的應(yīng)用,進(jìn)而提升自己的應(yīng)用質(zhì)量。
從Android O 開(kāi)始,應(yīng)用可以像以前一樣,在前臺(tái)啟動(dòng)服務(wù),但是當(dāng)被轉(zhuǎn)到后臺(tái)的時(shí)候,應(yīng)用只有幾分鐘的時(shí)間繼續(xù)進(jìn)行服務(wù),然后,他的后臺(tái)服務(wù)就會(huì)被停止。當(dāng)應(yīng)用在后臺(tái)時(shí),是不能使用 startService 來(lái)啟動(dòng)服務(wù)的,會(huì)拋出 illegalStateException 錯(cuò)誤。
所以,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),如果你的應(yīng)用需要和開(kāi)發(fā)者在后臺(tái)保持交互的話(huà),你需要按照下面的方案進(jìn)行優(yōu)化
- Context.startForegroundService()
- 使用JobScheduler WorkManager 調(diào)度后臺(tái)任務(wù)
- 使用 JobIntentService 替換 IntentService
后臺(tái)位置限制
很多開(kāi)發(fā)者反應(yīng),電池耗電是應(yīng)用開(kāi)發(fā)過(guò)程中最不爽的因素,而后臺(tái)定位就是電池耗電的最大原因之一。如果大量使用定位,電池就會(huì)消耗很快,用戶(hù)就會(huì)禁用定位,然后你的應(yīng)用體驗(yàn)就會(huì)變得很差。進(jìn)而會(huì)導(dǎo)致你的應(yīng)用的一些功能失效。所以,我們?cè)?Android O 的時(shí)候,對(duì)定位加了一定的限制。
當(dāng)你的應(yīng)用在前臺(tái)的時(shí)候,還是可以像往常一樣,你實(shí)時(shí)無(wú)限制的收集用戶(hù)信息,但是,當(dāng)你的應(yīng)用在后收集的時(shí)候,收集速度會(huì)被限速,大概每小時(shí)會(huì)有幾次的位置更新。
對(duì)開(kāi)發(fā)者來(lái)說(shuō),有以下方案可以用于優(yōu)化后臺(tái)位置信息的限制
- 使用地理圍欄 Geofence。我們對(duì)地理圍欄做了很多效率上的優(yōu)化,他的延時(shí)會(huì)稍稍增加,但是功耗卻只有原來(lái)的10%。
- 使用位置批處理 LocationService.setMaxWaitTime()。這就意味著,很多數(shù)據(jù)點(diǎn)都會(huì)在后臺(tái)收集,然后一起返回給你。雖然你每小時(shí)只會(huì)收到幾次位置信息,但是會(huì)包含更多的數(shù)據(jù)點(diǎn)。
- 被動(dòng)獲取位置信息 LocationService.setFastestInterval() 當(dāng)你的應(yīng)用在后臺(tái)時(shí),前臺(tái)應(yīng)用在收集位置信息,你的應(yīng)用可以被動(dòng)接受前臺(tái)應(yīng)用采集的數(shù)據(jù)信息。
隱式廣播限制
這也是之前 Android 系統(tǒng)中存在的一個(gè)問(wèn)題,隱式廣播可能會(huì)導(dǎo)致系統(tǒng)的大量服務(wù)被啟動(dòng),進(jìn)而會(huì)導(dǎo)致系統(tǒng)不穩(wěn)定。所以,Android O 中將不在 androidmanifest 中為隱式廣播注冊(cè)廣播接收器。具體限制可以參考下面的幾條:
- 無(wú)法在 androidmanifest 中衛(wèi)隱式廣播注冊(cè)廣播接收器
- androidmanifest 中注冊(cè)的顯式廣播仍然有效
- 使用Context.registerReceiver()注冊(cè)隱式廣播接收器仍然有效
針對(duì)上面的限制,我們建議廣大開(kāi)發(fā)者使用一下方法進(jìn)行優(yōu)化:
- 使用優(yōu)先級(jí)更高的 FCM 消息
- 使用JobScheduler WorkManager 來(lái)安排一個(gè)作業(yè)
Android 的新版本將會(huì)支持更多的現(xiàn)代化設(shè)備,應(yīng)用也應(yīng)該利用這些新的特性來(lái)提升用戶(hù)體驗(yàn),這些新的體驗(yàn)我們?cè)谙旅鏁?huì)一一介紹。
特長(zhǎng)屏幕支持
從 Android O 開(kāi)始,系統(tǒng)開(kāi)始支持特長(zhǎng)屏幕,很多手機(jī)廠家開(kāi)始發(fā)布特長(zhǎng)屏幕的手機(jī)。對(duì)于廣大開(kāi)發(fā)者來(lái)講,請(qǐng)不要對(duì)屏幕的縱橫比做出錯(cuò)誤的假設(shè)。否則會(huì)影響用戶(hù)的 UI 體驗(yàn)。
從 API 26 以上,系統(tǒng)就不會(huì)為應(yīng)用設(shè)置默認(rèn)的屏幕縱橫比,所以你的應(yīng)用應(yīng)該適應(yīng)不同的屏幕尺寸,來(lái)做一些屏幕自適應(yīng)的設(shè)計(jì)。
如果真的需要最大的屏幕縱橫比聲明支持的話(huà),縱橫比應(yīng)該這設(shè)置
- android:resizableActivity = false
- API 26 以上設(shè)置 android: MaxAspectRatio 聲明你所支持的最大縱橫比。
凹口屏幕支持
Android O 也對(duì)凹口屏幕進(jìn)了相關(guān)的支持,應(yīng)用可以在 androidmanifest 中通過(guò)一下方式實(shí)現(xiàn)對(duì)劉海屏幕的支持
- android:layoutInDisplayCutoutMode
- DEFAULT 有黑色邊框(屏幕縱向-僅在狀態(tài)欄隱藏時(shí))
- NEVER 一直有黑色邊框
- SHORT_EDGES 占用凹邊周?chē)?/li>
- WindowInsets.getDisplayCutout()
- getSafeInset(Top|Bottom|Right|Left) 獲取內(nèi)容的安全區(qū)域
- getBounds()獲取凹口區(qū)域(支持多個(gè)凹口)
- 對(duì)于開(kāi)發(fā)者來(lái)說(shuō)不要假設(shè)狀態(tài)欄高度,應(yīng)該通過(guò)模擬器多測(cè)試,模擬多種凹口屏的設(shè)備。
畫(huà)中畫(huà)模式(PIP)
從 Android O 開(kāi)始,系統(tǒng)開(kāi)始支持畫(huà)中畫(huà)模式。畫(huà)中畫(huà)模式是一種特殊的多窗口模式,可以用來(lái)視頻聊天,播放電影,導(dǎo)航等場(chǎng)景。
當(dāng)一個(gè)Activity 處于 PIP 模式,他會(huì)處于暫停狀態(tài),但是仍然會(huì)顯示內(nèi)容。出于這個(gè)原因,你應(yīng)該保證你的應(yīng)用不會(huì)在 onPause()中會(huì)暫停播放,正確的做法是,應(yīng)用在 onStop() 的過(guò)程中暫停播放視頻,在 onStart() 的時(shí)候繼續(xù)播放。
多顯示器支持
從 Android O 開(kāi)始,系統(tǒng)支持多顯示支持,如果 Activity 支持多顯示器顯示,系統(tǒng)會(huì)自動(dòng)啟用多顯示器支持。當(dāng)應(yīng)用啟動(dòng)一個(gè) Activity 的時(shí)候,可以通過(guò) ActivityOptions.setLaunchDisplayId() 來(lái)制定在哪個(gè)顯示器上進(jìn)行顯示。每個(gè)顯示器都有自己的配置,當(dāng)應(yīng)用從一個(gè)顯示器到另一個(gè)顯示器的時(shí)候,Activity 會(huì)根據(jù)顯示器的配置自動(dòng)修改某些屬性。需要注意的是:雖然 Activity 運(yùn)行在多個(gè)顯示器上,但是仍然只有一個(gè) Activity,不要假設(shè)暫停的 Activity 一定是不可見(jiàn)的。
最后,我們希望開(kāi)發(fā)者能夠利用最新的開(kāi)發(fā)工具,來(lái)提升應(yīng)用開(kāi)發(fā)效率和可靠性。 為了幫助開(kāi)發(fā)者更有效,更容易的開(kāi)發(fā)應(yīng)用。我們?cè)诮衲甑?Google I/O 上推出了 Android JetPack 。其中包含了應(yīng)用開(kāi)發(fā)庫(kù)、工具、以及最佳實(shí)用指南。通過(guò)提供通用的基礎(chǔ)配件和組件,幫助開(kāi)發(fā)者更好的專(zhuān)注于應(yīng)用開(kāi)發(fā)的業(yè)務(wù)邏輯。
由于時(shí)間原因,我們無(wú)法詳細(xì)的介紹每個(gè)模塊的具體使用方法,請(qǐng)大家參考文檔和實(shí)例代碼,在應(yīng)用中使用最新的 Android JetPack 組件
包名重構(gòu)
所有的擴(kuò)展類(lèi),例如 v4 和 v7 在 JetPack 中使用統(tǒng)一的包名 androidx。同時(shí) gradle 也提供了相應(yīng)的轉(zhuǎn)換支持。
我們下面來(lái)介紹一下 JetPack 的架構(gòu)組件
架構(gòu)組件提供了數(shù)據(jù)存儲(chǔ)、管理生命周期等模塊化的功能幫助開(kāi)發(fā)者避免在開(kāi)發(fā)過(guò)程中的常見(jiàn)錯(cuò)誤,減少樣板文件。 在架構(gòu)組件中,Room 是支出流暢數(shù)據(jù)庫(kù)訪問(wèn)的對(duì)象映射抽象層,其他的組件的的說(shuō)明可以在下面的圖片中看到
有些組件可以放在一起使用,比如:LiveData 和 Room,當(dāng) Room 中的數(shù)據(jù)有更新的時(shí)候,他就會(huì)更新 LiveData 中的數(shù)據(jù),從而自動(dòng)觸發(fā)界面中的更新。
Kotlin
我們現(xiàn)在也非常鼓勵(lì)開(kāi)發(fā)者使用 Kotlin 編程語(yǔ)言,相較于 Java,Kotlin 可以減少25%的代碼量,并且可以有效防止 NullPointerException,Kotlin 和 Java 的二進(jìn)制代碼完全兼容,可以互相調(diào)用,所以大家可以逐步的遷移到 Kotlin 的開(kāi)發(fā)語(yǔ)言。
我們?cè)?Android 9 SDK 中,對(duì) Kotlin 添加了可控性注解,如果你的項(xiàng)目中違法了可控性注解的協(xié)議,你的代碼在 IDE 中會(huì)出現(xiàn)警告,雖然只是警告級(jí)別,但是我們想再下個(gè)版本的 IDE 中提高錯(cuò)誤等級(jí)。
從去年 Google I/O 中發(fā)布 Kotlin 成為 Android 開(kāi)發(fā)的官方語(yǔ)言,我們做了相關(guān)的問(wèn)卷調(diào)查,在調(diào)查中我們發(fā)現(xiàn),40%的開(kāi)發(fā)者已經(jīng)在使用 Kotlin 進(jìn)行開(kāi)發(fā)
JetPack 中,我們也提供了 Kotlin 的擴(kuò)展庫(kù) KTX,使 Kotlin 的代碼更加簡(jiǎn)單整潔,更符合 Android 開(kāi)發(fā)習(xí)慣。KTX 可以幫助你更簡(jiǎn)單的編寫(xiě)業(yè)務(wù)的核心代碼。
通過(guò)使用 Kotlin,開(kāi)發(fā)者們也嘗到了甜頭,我們?cè)趪?guó)內(nèi)的合作伙伴 Camera360,使用 Kotlin 獲得了全球業(yè)務(wù)上的增長(zhǎng),你們可以通過(guò)圖片中的二維碼,了解關(guān)于 Camera360 的開(kāi)發(fā)者故事
Android Studio 3.1中也更新了許多新工具,幫助開(kāi)發(fā)者更好的開(kāi)發(fā)和測(cè)試 Android 應(yīng)用。例如:支持 Kotlin Lint
Android Studio 3.1 中 還有很多新工具,但是由于時(shí)間關(guān)系我們無(wú)法一一做介紹,總而言之,Android Studio 3.1 提供了更好的編譯速度、更快的模擬器、更全面的分析器、更好的 Kotlin 支持和更好的架構(gòu)組件的支持。歡迎開(kāi)發(fā)者們?cè)谝院蟮拈_(kāi)發(fā)過(guò)程中使用。
Google 開(kāi)發(fā)者大會(huì) 2018 技術(shù)干貨
總結(jié)
以上是生活随笔為你收集整理的Android 在 Google 开发者大会上发布了哪些更新? | Google 开发者大会 2018的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么镜头最适合拍风景_35mm F1.8
- 下一篇: 数字电路反相器符号_数字电路の门电路(1