Android 在 Google 開發者大會上發布了哪些更新? | Google 開發者大會 2018

有哪些新的 Android 系統特性

  • Google Play 上的 targetVersion 要求
    • 2018年8月 新應用發布必須為26或者更高
    • 2018年11月 升級現有應用必須為26或者更高
    • 2019年之后 新發布或者升級應用必須為一年內發布的 Android 版本
  • 工信部已經出臺相應的政策,中國主流的應用市場也已經跟進
  • Google 提供了全新的 TargetVersion 升級指南,可以掃描圖片中的二維碼獲得。

電量優化和后臺控制

Android 始終致力于電量優化和后臺控制,通過后臺控制程序進程,優化電量,進而提升待機時間,來提升用戶體驗。我們希望開發者通過下圖中的要求,來測試自己的應用,進而提升自己的應用質量。

從Android O 開始,應用可以像以前一樣,在前臺啟動服務,但是當被轉到后臺的時候,應用只有幾分鐘的時間繼續進行服務,然后,他的后臺服務就會被停止。當應用在后臺時,是不能使用 startService 來啟動服務的,會拋出 illegalStateException 錯誤。

所以,對于開發者來說,如果你的應用需要和開發者在后臺保持交互的話,你需要按照下面的方案進行優化

  • Context.startForegroundService()
  • 使用JobScheduler WorkManager 調度后臺任務
  • 使用 JobIntentService 替換 IntentService

后臺位置限制

很多開發者反應,電池耗電是應用開發過程中最不爽的因素,而后臺定位就是電池耗電的最大原因之一。如果大量使用定位,電池就會消耗很快,用戶就會禁用定位,然后你的應用體驗就會變得很差。進而會導致你的應用的一些功能失效。所以,我們在 Android O 的時候,對定位加了一定的限制。

當你的應用在前臺的時候,還是可以像往常一樣,你實時無限制的收集用戶信息,但是,當你的應用在后收集的時候,收集速度會被限速,大概每小時會有幾次的位置更新。

對開發者來說,有以下方案可以用于優化后臺位置信息的限制

  • 使用地理圍欄 Geofence。我們對地理圍欄做了很多效率上的優化,他的延時會稍稍增加,但是功耗卻只有原來的10%。
  • 使用位置批處理 LocationService.setMaxWaitTime()。這就意味著,很多數據點都會在后臺收集,然后一起返回給你。雖然你每小時只會收到幾次位置信息,但是會包含更多的數據點。
  • 被動獲取位置信息 LocationService.setFastestInterval() 當你的應用在后臺時,前臺應用在收集位置信息,你的應用可以被動接受前臺應用采集的數據信息。

隱式廣播限制

這也是之前 Android 系統中存在的一個問題,隱式廣播可能會導致系統的大量服務被啟動,進而會導致系統不穩定。所以,Android O 中將不在 androidmanifest 中為隱式廣播注冊廣播接收器。具體限制可以參考下面的幾條:

  • 無法在 androidmanifest 中衛隱式廣播注冊廣播接收器
  • androidmanifest 中注冊的顯式廣播仍然有效
  • 使用Context.registerReceiver()注冊隱式廣播接收器仍然有效

針對上面的限制,我們建議廣大開發者使用一下方法進行優化:

  • 使用優先級更高的 FCM 消息
  • 使用JobScheduler WorkManager 來安排一個作業

Android 的新版本將會支持更多的現代化設備,應用也應該利用這些新的特性來提升用戶體驗,這些新的體驗我們在下面會一一介紹。

特長屏幕支持

從 Android O 開始,系統開始支持特長屏幕,很多手機廠家開始發布特長屏幕的手機。對于廣大開發者來講,請不要對屏幕的縱橫比做出錯誤的假設。否則會影響用戶的 UI 體驗。

從 API 26 以上,系統就不會為應用設置默認的屏幕縱橫比,所以你的應用應該適應不同的屏幕尺寸,來做一些屏幕自適應的設計。

如果真的需要最大的屏幕縱橫比聲明支持的話,縱橫比應該這設置

  • android:resizableActivity = false
  • API 26 以上設置 android: MaxAspectRatio 聲明你所支持的最大縱橫比。

凹口屏幕支持

Android O 也對凹口屏幕進了相關的支持,應用可以在 androidmanifest 中通過一下方式實現對劉海屏幕的支持

  • android:layoutInDisplayCutoutMode
    • DEFAULT 有黑色邊框(屏幕縱向-僅在狀態欄隱藏時)
    • NEVER 一直有黑色邊框
    • SHORT_EDGES 占用凹邊周圍
  • WindowInsets.getDisplayCutout()
    • getSafeInset(Top|Bottom|Right|Left) 獲取內容的安全區域
    • getBounds()獲取凹口區域(支持多個凹口)
  • 對于開發者來說不要假設狀態欄高度,應該通過模擬器多測試,模擬多種凹口屏的設備。

畫中畫模式(PIP)

從 Android O 開始,系統開始支持畫中畫模式。畫中畫模式是一種特殊的多窗口模式,可以用來視頻聊天,播放電影,導航等場景。

當一個Activity 處于 PIP 模式,他會處于暫停狀態,但是仍然會顯示內容。出于這個原因,你應該保證你的應用不會在 onPause()中會暫停播放,正確的做法是,應用在 onStop() 的過程中暫停播放視頻,在 onStart() 的時候繼續播放。

多顯示器支持

從 Android O 開始,系統支持多顯示支持,如果 Activity 支持多顯示器顯示,系統會自動啟用多顯示器支持。當應用啟動一個 Activity 的時候,可以通過 ActivityOptions.setLaunchDisplayId() 來制定在哪個顯示器上進行顯示。每個顯示器都有自己的配置,當應用從一個顯示器到另一個顯示器的時候,Activity 會根據顯示器的配置自動修改某些屬性。需要注意的是:雖然 Activity 運行在多個顯示器上,但是仍然只有一個 Activity,不要假設暫停的 Activity 一定是不可見的。

最后,我們希望開發者能夠利用最新的開發工具,來提升應用開發效率和可靠性。 為了幫助開發者更有效,更容易的開發應用。我們在今年的 Google I/O 上推出了 Android JetPack 。其中包含了應用開發庫、工具、以及最佳實用指南。通過提供通用的基礎配件和組件,幫助開發者更好的專注于應用開發的業務邏輯。

由于時間原因,我們無法詳細的介紹每個模塊的具體使用方法,請大家參考文檔和實例代碼,在應用中使用最新的 Android JetPack 組件

包名重構

所有的擴展類,例如 v4 和 v7 在 JetPack 中使用統一的包名 androidx。同時 gradle 也提供了相應的轉換支持。

我們下面來介紹一下 JetPack 的架構組件

架構組件提供了數據存儲、管理生命周期等模塊化的功能幫助開發者避免在開發過程中的常見錯誤,減少樣板文件。 在架構組件中,Room 是支出流暢數據庫訪問的對象映射抽象層,其他的組件的的說明可以在下面的圖片中看到

有些組件可以放在一起使用,比如:LiveData 和 Room,當 Room 中的數據有更新的時候,他就會更新 LiveData 中的數據,從而自動觸發界面中的更新。

Kotlin

我們現在也非常鼓勵開發者使用 Kotlin 編程語言,相較于 Java,Kotlin 可以減少25%的代碼量,并且可以有效防止 NullPointerException,Kotlin 和 Java 的二進制代碼完全兼容,可以互相調用,所以大家可以逐步的遷移到 Kotlin 的開發語言。

我們在 Android 9 SDK 中,對 Kotlin 添加了可控性注解,如果你的項目中違法了可控性注解的協議,你的代碼在 IDE 中會出現警告,雖然只是警告級別,但是我們想再下個版本的 IDE 中提高錯誤等級。

從去年 Google I/O 中發布 Kotlin 成為 Android 開發的官方語言,我們做了相關的問卷調查,在調查中我們發現,40%的開發者已經在使用 Kotlin 進行開發

JetPack 中,我們也提供了 Kotlin 的擴展庫 KTX,使 Kotlin 的代碼更加簡單整潔,更符合 Android 開發習慣。KTX 可以幫助你更簡單的編寫業務的核心代碼。

通過使用 Kotlin,開發者們也嘗到了甜頭,我們在國內的合作伙伴 Camera360,使用 Kotlin 獲得了全球業務上的增長,你們可以通過圖片中的二維碼,了解關于 Camera360 的開發者故事

Android Studio 3.1中也更新了許多新工具,幫助開發者更好的開發和測試 Android 應用。例如:支持 Kotlin Lint

Android Studio 3.1 中 還有很多新工具,但是由于時間關系我們無法一一做介紹,總而言之,Android Studio 3.1 提供了更好的編譯速度、更快的模擬器、更全面的分析器、更好的 Kotlin 支持和更好的架構組件的支持。歡迎開發者們在以后的開發過程中使用。

Google 開發者大會 2018 技術干貨

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450636.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

兩個不同的數據庫如何跨庫事務

首先我們要明白同一實例,簡單來說就是一個ip,如果兩個數據庫位于同一個ip,就是同一實例。其實實例并不相當于ip, 他其實相當于服務,也就是serve。 這樣的兩個或多個就可以跨庫事務,比如 begin; insert in…

鏈表排序(冒泡、選擇、插入、快排、歸并、希爾、堆排序)

參考http://www.cnblogs.com/TenosDoIt/p/3666585.html 插入排序(算法中是直接交換節點,時間復雜度O(n^2),空間復雜度O(1)) 1 class Solution {2 public:3 ListNode *insertionSortList(Lis…

zookeeper使用和原理探究

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 zookeeper介紹 zookeeper是一個為分布式應用提供一致性服務的軟件,它是開源的Hadoop項目中的一個子項目,并且根據…

thinkphp如何部署到寶塔面板nginx服務器

原理:一般本地都會使用apache服務器,這個對pathinfo(兩個,一個是環境變量$_SERVER[PATH_INFO],另一個是pathinfo函數)路由解析非常支持的,不需要部署什么, 但是nginx是對pathinfo函…

Android獲取所有應用的資源id和對應的uri

背景在某些應用中,為了實現應用apk資源放入重復利用,或者使用反射得到本應用的資源,需要使用反射方式獲得,但Resources類中也自帶了這種獲取方式,并且功能更加強大你可以獲取string,color,drawable,raw,xml等文件&…

nginx的腳本引擎(一)

nginx的腳本的語法和shell是很像的,我大致看了一下覺得挺有意思的,就想寫寫記錄一下。我沒看過shell腳本的引擎,不知道nginx腳本引擎和shell腳本引擎像不像,但是我覺得nginx的腳本引擎有點像C和匯編。 ngx_http_script_engine_t這…

一個待辦事列表todolist

最近有位老師讓我做的,圖片在下面,做了4個多小時,ui有的簡陋,可以再美化一下,這個會更好看,畢竟我也不是專業前端,測試網站http://todolist.sshouxin.top/使用的是thinkphp5.1的框架&#xff0c…

詳細說明 SourceTree 免登錄,跳過初始設置的方法(Windows 版 )

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 首先,安裝完 SourceTree 以后先運行一次,彈出初始化登錄頁面后退出。 2. 進入這個文件夾:C:\Users…

什么是好的API設計?

摘要:有人言,API設計是編程工作中最難的事情。甚至有人認為至少要有10年的工作經驗才能接觸它。不過這里提出了一個引人思考的問題:究竟是構建什么樣的庫需要花費10年的時間去學習? 有人言,API設計是編程工作中最難的事…

Linux學習記錄-文件、目錄與磁盤

用戶和群組 用戶和群組主要是為了區分用戶對文件的操作權限。 賬號在/etc/passwd個人密碼在/etc/shadow組信息在/etc/group 不要亂動這3個文件文件權限和目錄配置 文件屬性 文件前綴解釋,例如: 第一個字符代表這個文件是『目錄、文件或鏈接文件等等』&am…

php curl模擬https請求

https請求(支持GET和POST) function http_request($url,$data null){$curl curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if(!empty($data)){curl_setopt($cur…

springboot集成環信sdk報錯

import io.swagger.client.ApiException; import io.swagger.client.api.MessagesApi; import io.swagger.client.model.Msg 這個是因為少兩個包,只需要把在你的pom.xml添加以下代碼即可,不要忘記點贊哈只需要添加兩個包即可,你可以自行網上下…

解決 error: Your local changes to the following files would be overwritten by merge:XXXX

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 idea 上將本地代碼推送到 git后 , 報錯如下圖 error: Your local changes to the following files would be overwritten by merge:src/…

深度有趣 | 30 快速圖像風格遷移

簡介 使用TensorFlow實現快速圖像風格遷移(Fast Neural Style Transfer) 原理 在之前介紹的圖像風格遷移中,我們根據內容圖片和風格圖片優化輸入圖片,使得內容損失函數和風格損失函數盡可能小 和DeepDream一樣,屬于網絡…

轉型從思維習慣的轉變開始

摘要:首先建議大家不要輕易轉向管理崗位,要認清自己是否適合做管理。轉型過程中應把握好幾點:良好的技術基礎,它是贏得團隊信任的前提,是把握團隊整體方向的關鍵;培養大局觀,只有站得高才能看得…

數據庫小知識點(一直更新)

一、mysql查詢是否含有某字段: mysql數據庫查詢帶有某個字段的所有表名 SELECT * FROM information_schema.columns WHERE column_namecolumn_name; oracle數據庫查詢帶有某個字段的所有表名 select column_name,table_name,from user_tab_columns where column_n…

其他運算符

原文地址:https://wangdoc.com/javascript/ void運算符 void運算符的作用是執行一個表達式,然后不返回任何值,或者說返回undefined。 void 0 // undefined void(0) // undefined 上面是void運算符的兩種寫法,都正確。建議采用后一…

git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解決辦法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 最近剛學 git rebase,覺得很牛逼的樣子, 結果今天就被打臉了。 git pull --rebase 1 報錯: Cann…

vue如何實現單頁緩存方案分析

實現全站的頁面緩存,前進刷新,返回走緩存,并且能記住上一頁的滾動位置,參考了很多技術實現,github上的導航組件實現的原理要么使用的keep-alive,要么參考了keep-alive的源碼,但是只用keep-alive…

C語言常用函數簡介

一、字符測試函數 isupper()測試字符是否為大寫英文字ispunct()測試字符是否為標點符號或特殊符號isspace()測試字符是否為空格字符isprint()測試字符是否為可打印字符islower()測試字符是否為小寫字母isgraphis()測試字符是否為可打印字符isdigit()測試字符是否為阿拉伯數字i…