文章微信公衆號「AndroidTraveler」首發android
5 月 20 號參加了 Android Q Labs,所以本篇說一說會議的部份內容以及本身的一些想法。微信
會議主要是加深開發者對 Android Q 的瞭解,從而幫助開發者作好 Android Q 的兼容工做。app
所以本篇我會選擇性說明一些在 Android Q 上你須要兼容的一些事情。工具
首先咱們說說爲何要限制後臺 Activity 的啓動。佈局
Android Q 以前的狀況以下:
學習
考慮下面的幾個場景:測試
假設在上面的幾個場景中,忽然後臺 Activity 彈出一個框,多是廣告框,也多是搶佔我界面的其餘界面。優化
這個時候我以爲心裏是奔潰的,並且用戶體驗超級很差。視頻
基於此,Android Q 裏面引入了對後臺 Activity 啓動的限制。blog
注意關鍵的一個點是這個變化對全部在 Android Q 上運行的應用都會有影響。不管你的 targetSDK 版本。
因此若是你的 APP 存在這種場景的狀況下,你就須要作一下額外處理了。
基本的處理方式是經過 Notification 彈一個通知,若是用戶想點再點擊進入你的 Activity。
那麼如今有哪些 APP 會用到這種呢?舉一個你們熟悉的。
這邊測試了一下,微信語音通話是會直接從後臺啓動全屏覆蓋的,因此可能微信須要針對這個行爲變動作處理。
先看下 Q 以前的狀況:
Q 的變化分兩部分來講明吧。
一部分是 MediaStore 的處理,另外一部分是分區存儲的處理。
先說說 MediaStore,什麼是 MediaStore 呢?
對於 MediaStore,Q 的處理以下:
能夠看到對於 MediaStore,能夠直接寫,讀的話僅僅限於本身寫進去的文件。若是要查看其它應用提供的內容,須要獲取讀權限。
另外你會發現 MediaStore 上面只有媒體相關的,若是文件是非媒體類型呢?因此 Q 新增 MediaStore.Downloads,以下:
總結起來以下:
權限的變動:在沒卸載的狀況下,本身 APP 寫或者讀 MediaStore 媒體文件不須要權限。讀其餘的須要權限。卸載後讀本身以前寫入的也須要權限。
另外還有一個就是圖片有一個位置信息,這個對用戶來講也是隱私,所以須要作額外處理。
說完了 MediaStore,接下來講說分區存儲。
總結起來就是分區存儲模式下,不可以再直接訪問 /sdcard 下的文件,而要經過 MediaStore 或者 SAF。固然本身 packagename 命名的目錄下面仍是能夠訪問的。
另外目前能夠經過在清單文件設置是否啓用。能夠設置 targetSDK 爲 Q 的應用不啓用,也能夠設置 targetSDK 低於 Q 的啓用。經過代碼能夠確認是否處於分區存儲模式下。
推薦儘快完成適配,由於目前是爲了給開發者更多時間適應這個變化,等到下一個版本 Android R 的時候會強制執行分區存儲模式,到時候清單文件的設置也是沒用的。所以強烈建議將這個工做排上兼容行程。固然在 Q 的兼容上能夠根據自身業務進度進行設置,假設時間不夠,能夠暫時不啓用,可是後續須要排期處理。
咱們看看 Android P 申請位置權限的對話框:
能夠看到只有容許和拒絕兩個選項。
如今看看 Android Q 的:
會發現多了一些選項,其中有一個僅在使用該應用時容許。
在 Android P 的時候,清單文件只須要申請一個權限:
而在 Q 上面,有兩個,其中一個有 background 的。
之因此有兩個,就是但願儘可能少的獲取權限,除非是你的 APP 真的有這個需求。在申請的時候也建議增量申請,什麼意思呢?
首先第一步先獲取位置權限:
在用戶容許的狀況下,若是 APP 須要,再進行增量權限請求:
推薦的位置權限最佳實踐以下:
Q 支持深色主題,兼容有兩種方式。
一種就是簡單粗暴,適合時間少的。
一種就是推薦的,適合有足夠時間的。
簡單的方式若是是全局設置,只須要設置主題便可:
若是你須要對單個 View 作設置,也是能夠的:
推薦的方式是使用 DayNight。
不過我在測試區啓動深色主題時發現有點卡,估計後面系統還須要優化。
BubbleView 其實就是懸浮窗。指紋識別也是 Android Q 引入的一個官方方式。
這個不須要作兼容,算是新功能,這裏不贅述。
其實在代碼演示的時候,我注意到 PPT 上面的代碼基本都是 Kotlin。
包括以前的 Kotlin-first 以及此次 Q & A 環節也有小夥伴提問到底 Google 主推 Kotlin 仍是 Flutter。
我這邊說下個人見解吧。
我以爲 Kotlin 和 Flutter 不衝突。
首先第一個 Kotlin 是一門語言,而 Flutter 是一個跨平臺方案。
若是你的 APP 有跨平臺的需求,或者有不少頁面須要開發,人手不足,功能迭代比較頻繁,那麼你能夠了解或者嘗試使用 Flutter 來開發界面。一套代碼,兩端運行。尤爲 Flutter 1.5 佈局很廣,涵蓋了移動端、Web、桌面端和嵌入式。
對於 Android 開發者,能夠看個人 Flutter 即學即用系列博客快速入門。
說完了 Flutter,說下 Kotlin 吧。
Kotlin 是一門語言,語言是幹嗎的?是實現咱們業務的工具。
假設如今 Java 和 Kotlin 均可以實現咱們的業務功能,而且官方都支持這兩種語言,你有必要花不少時間去單獨學習 Kotlin 嗎?我以爲沒太大必要。
因此我以爲對待 Kotlin 你能夠了解一下,可以看懂 Kotlin 代碼,會寫簡單的 Demo,我以爲就夠了。
固然若是你時間足夠,想多學一門語言,徹底沒問題。
以上是參加此次會議的一些簡單總結和見解,更多內容經過下面的全程錄像瞭解。
本次 Android Q Labs 全程錄像能夠經過連接觀看:Android Q Labs