Android Q 兼容那些事

文章微信公衆號「AndroidTraveler」首發android

5 月 20 號參加了 Android Q Labs,所以本篇說一說會議的部份內容以及本身的一些想法。微信

會議主要是加深開發者對 Android Q 的瞭解,從而幫助開發者作好 Android Q 的兼容工做。app

所以本篇我會選擇性說明一些在 Android Q 上你須要兼容的一些事情。工具

1. 後臺 Activity 啓動限制

首先咱們說說爲何要限制後臺 Activity 的啓動。佈局

Android Q 以前的狀況以下:
學習

考慮下面的幾個場景:測試

  1. 我在開車過程當中使用導航地圖進行導航
  2. 我在使用拍照功能拍攝一個關鍵場景的視頻
  3. 我在玩遊戲,好比王者榮耀,正準備團戰拿五殺的時刻
    ......

假設在上面的幾個場景中,忽然後臺 Activity 彈出一個框,多是廣告框,也多是搶佔我界面的其餘界面。優化

這個時候我以爲心裏是奔潰的,並且用戶體驗超級很差。視頻

基於此,Android Q 裏面引入了對後臺 Activity 啓動的限制。blog

注意關鍵的一個點是這個變化對全部在 Android Q 上運行的應用都會有影響。不管你的 targetSDK 版本。

因此若是你的 APP 存在這種場景的狀況下,你就須要作一下額外處理了。

基本的處理方式是經過 Notification 彈一個通知,若是用戶想點再點擊進入你的 Activity。

那麼如今有哪些 APP 會用到這種呢?舉一個你們熟悉的。

這邊測試了一下,微信語音通話是會直接從後臺啓動全屏覆蓋的,因此可能微信須要針對這個行爲變動作處理。

2. 存儲的變化

先看下 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 的兼容上能夠根據自身業務進度進行設置,假設時間不夠,能夠暫時不啓用,可是後續須要排期處理。

3. 位置權限

咱們看看 Android P 申請位置權限的對話框:

能夠看到只有容許和拒絕兩個選項。

如今看看 Android Q 的:

會發現多了一些選項,其中有一個僅在使用該應用時容許

在 Android P 的時候,清單文件只須要申請一個權限:

而在 Q 上面,有兩個,其中一個有 background 的。

之因此有兩個,就是但願儘可能少的獲取權限,除非是你的 APP 真的有這個需求。在申請的時候也建議增量申請,什麼意思呢?

首先第一步先獲取位置權限:

在用戶容許的狀況下,若是 APP 須要,再進行增量權限請求:

推薦的位置權限最佳實踐以下:

4. 深色主題

Q 支持深色主題,兼容有兩種方式。

一種就是簡單粗暴,適合時間少的。
一種就是推薦的,適合有足夠時間的。

簡單的方式若是是全局設置,只須要設置主題便可:

若是你須要對單個 View 作設置,也是能夠的:

推薦的方式是使用 DayNight。

不過我在測試區啓動深色主題時發現有點卡,估計後面系統還須要優化。

5. BubbleView 和指紋識別

BubbleView 其實就是懸浮窗。指紋識別也是 Android Q 引入的一個官方方式。
這個不須要作兼容,算是新功能,這裏不贅述。

6. Kotlin vs Flutter

其實在代碼演示的時候,我注意到 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

相關文章
相關標籤/搜索