Android Q 要來(lái)了,一個(gè)影響國(guó)內(nèi) 90% App 的適配項(xiàng)!

一. Android Q 的一項(xiàng)適配
Android Q 在今年 Q3 就準(zhǔn)備發(fā)布正式版了,但有一個(gè)影響 90% 應(yīng)用的適配改動(dòng)。
目前,不少 Android App 都有一個(gè)啟動(dòng)界面(Launch/Splash Screen),即應(yīng)用啟動(dòng)時(shí),在顯示主頁(yè)前增加一個(gè)有內(nèi)容的頁(yè)面,這好像變成了 App 的標(biāo)配。
這種設(shè)計(jì),最初是解決冷啟動(dòng)時(shí),會(huì)有白屏或黑屏的閃動(dòng)問(wèn)題,其目的是為了提高用戶體驗(yàn)。
后來(lái)發(fā)現(xiàn)在這個(gè)過(guò)程中,不干點(diǎn)什么好像有點(diǎn)浪費(fèi),那不如拿來(lái)初始化數(shù)據(jù)、SDK,再加載個(gè)廣告吧,總之,啟動(dòng)頁(yè)承載的業(yè)務(wù)越來(lái)越多了。
在用戶的角度,可以看見(jiàn)的就是,App 啟動(dòng)時(shí),先有個(gè)啟動(dòng)頁(yè),在啟動(dòng)頁(yè)加載了一個(gè)廣告,倒數(shù) 3、2、1,倒數(shù)歸零后跳到真實(shí)的主頁(yè)。這種情況下,啟動(dòng)頁(yè)就承載了加載廣告的邏輯。通常的代碼實(shí)現(xiàn)是在廣告顯示后,增加一個(gè)倒數(shù)的定時(shí)器,在倒數(shù)歸零的時(shí)候,再去調(diào)用 startActivity() 跳轉(zhuǎn)到真實(shí)的主頁(yè)上。
有興趣可以試試,不少 App 在啟動(dòng)后,立即按 Home 鍵,過(guò) 3s(廣告時(shí)間?) 之后又會(huì)被調(diào)起來(lái)。
本來(lái)呢,這種設(shè)計(jì)也是無(wú)傷大雅的,但是 Android Q 來(lái)了,就不一樣了。最近剛發(fā)布了 Android Q Beta 4 版本,按照其時(shí)間表來(lái)看,今年第三個(gè)季度就會(huì)發(fā)布正式版。
Android Q 具有更強(qiáng)的隱私保護(hù),其中有一條,它開(kāi)始限制后臺(tái) App 啟動(dòng) Activity。
以最新的 Android Q Beta 4 來(lái)舉例,當(dāng)你的 App 處于后臺(tái)時(shí),一旦嘗試開(kāi)啟新的頁(yè)面,會(huì)發(fā)生什么呢?首先你的新頁(yè)面肯定是打不開(kāi)的,在現(xiàn)有的 Beta 版本上,系統(tǒng)還會(huì)輸出一條警告 Log,并彈出一條 Toast。
例如,我們開(kāi)發(fā)者比較常用的 掘金App。
猜想,在正式版發(fā)布時(shí),應(yīng)該會(huì)去掉此 Toast 警告,沒(méi)必要以這么強(qiáng)的提示來(lái)提醒用戶。
但是這依然是我們需要提前做好適配準(zhǔn)備的。畢竟在不少快速迭代的項(xiàng)目中,啟動(dòng)速度并不是優(yōu)先考慮優(yōu)化的指標(biāo),各種初始化也很隨意的就放在了啟動(dòng)頁(yè)里,到最后不得不優(yōu)化的時(shí)候,就比較費(fèi)時(shí)和令人頭疼了。
二. MD 設(shè)計(jì)里的啟動(dòng)頁(yè)
在啟動(dòng)頁(yè)里,做大量的邏輯,甚至強(qiáng)制間隔幾秒(顯示廣告),這種做法本身在 Google 的設(shè)計(jì)規(guī)范就是不推薦的,不少海外大廠的 App,也是遵循此設(shè)計(jì)規(guī)范。
而國(guó)內(nèi)的 App 里,在啟動(dòng)頁(yè)里加塞點(diǎn)功能,好像是一種更為普遍的做法。
在 Material Design 的設(shè)計(jì)規(guī)范中,也明確定義了啟動(dòng)圖的設(shè)計(jì)規(guī)范,其核心就是為了解決冷啟動(dòng)時(shí),那個(gè)短暫的白屏不至于顯得太突兀,設(shè)計(jì)的好了,還可以增加品牌的辨識(shí)度。
啟動(dòng)頁(yè)面的設(shè)計(jì),其重點(diǎn)在于,它僅僅在應(yīng)用啟動(dòng)的瞬間顯示,也就是說(shuō),啟動(dòng)頁(yè)面不應(yīng)該導(dǎo)致應(yīng)用的啟動(dòng)變慢,強(qiáng)制顯示一段時(shí)間廣告,更是不應(yīng)該的做法。
畢竟打開(kāi) App 是為了它的功能,更快把首屏展示給用戶,體驗(yàn)就更好。
三. Q 的后臺(tái)啟動(dòng)建議
在 Android Q 之前的版本中,本質(zhì)上就已經(jīng)對(duì)一些頁(yè)面的顯示做了限制,例如 Android 8.0 增加了懸浮窗權(quán)限,其實(shí)更多的也是為了不讓一些惡意的 App 打擾用戶。
這次 Android Q 更徹底,當(dāng)前處在后臺(tái)的 App,沒(méi)有打開(kāi)新頁(yè)的權(quán)限,這種設(shè)定,按照我們常規(guī)的思考,對(duì)開(kāi)發(fā)者的影響應(yīng)該不大,畢竟大多數(shù)時(shí)候,我們并不需要在后臺(tái)彈出一個(gè)頁(yè)面。
這不是撞上了國(guó)內(nèi)較重的啟動(dòng)頁(yè)設(shè)計(jì),才會(huì)出現(xiàn)問(wèn)題。
針對(duì)必要的顯示,Google 也明確給出了解決建議,可以判斷應(yīng)用在后臺(tái)時(shí),通過(guò)向用戶發(fā)送一條通知(Notification),來(lái)由用戶決定是否開(kāi)啟這個(gè)頁(yè)面。
這種解決方案,在本文這個(gè)語(yǔ)境中,自然是沒(méi)有什么鳥(niǎo)用的,走都走了,總不能抱住用戶的大腿。
這種安全級(jí)的升級(jí)優(yōu)化,我覺(jué)得按照官方的規(guī)范,適配就好了。
四. 適配思路
4.1 遵循 MD 規(guī)范
前面也提到,如果我們遵循 Material Design 的規(guī)范,只讓啟動(dòng)圖,作為一個(gè)對(duì)冷啟動(dòng)的優(yōu)化,瞬時(shí)展示,之后立即顯示主頁(yè),就不會(huì)有問(wèn)題。
在這個(gè)過(guò)程中,全程只有一個(gè) Activity 參與,自然無(wú)需啟動(dòng)一個(gè)新頁(yè)面,也就不會(huì)有問(wèn)題。唯一需要注意的是,在 setContentView() 方法之前,別忘了修改當(dāng)前頁(yè)面的 Theme。
對(duì)于現(xiàn)有項(xiàng)目,這種優(yōu)化,其實(shí)我們大部分的工作,來(lái)自如何協(xié)調(diào)已經(jīng)在啟動(dòng)頁(yè)中的各種資源的初始化邏輯,等于之前有一個(gè)空轉(zhuǎn)的時(shí)間被利用起來(lái)初始化資源了,現(xiàn)在這些已經(jīng)占用的時(shí)間,沒(méi)有了。
不過(guò)也別擔(dān)心,其實(shí)有不少優(yōu)秀的開(kāi)源庫(kù)就在解決這些問(wèn)題,例如之前推文中介紹的 Alibaba 的 Alpha 庫(kù),就是一個(gè)基于 PERT 圖構(gòu)建的 Android 異步啟動(dòng)框架。
4.2 先判斷是否前臺(tái)再跳轉(zhuǎn)
正如小標(biāo)題上寫(xiě)的,我們可以在啟動(dòng)頁(yè)跳轉(zhuǎn)到主頁(yè)時(shí),檢測(cè)當(dāng)前頁(yè)面是否在前臺(tái),如果不在,就放棄跳轉(zhuǎn)。因?yàn)樵诤笈_(tái)時(shí),并沒(méi)有打開(kāi)新頁(yè)的動(dòng)作,自然也不會(huì)有警告提示。
這算是一種,在現(xiàn)有項(xiàng)目基礎(chǔ)之上,改動(dòng)最小適配方案。
此時(shí)再細(xì)化一些,在我們放棄跳轉(zhuǎn)后,可以有兩個(gè)選擇:
1. 關(guān)閉啟動(dòng)頁(yè),下次再被點(diǎn)擊重走啟動(dòng)頁(yè)邏輯
這很好理解,把啟動(dòng)頁(yè) finish() 掉,假裝它從來(lái)沒(méi)有啟動(dòng)過(guò)。下次用戶再啟動(dòng)時(shí),之前所有的步驟再走一遍,該顯示的廣告再多一次曝光。
現(xiàn)在有一些 App 已經(jīng)是這種方案在優(yōu)化。
2. 關(guān)閉啟動(dòng)頁(yè),并設(shè)置標(biāo)記位
在發(fā)現(xiàn)啟動(dòng)頁(yè)不在前臺(tái)顯示時(shí),不做跳轉(zhuǎn)的動(dòng)作,同時(shí)設(shè)置一個(gè)標(biāo)志位,但是此時(shí)不關(guān)閉當(dāng)前頁(yè)面。下次啟動(dòng)頁(yè)再被啟動(dòng)時(shí),直接跳轉(zhuǎn)到主頁(yè)。
如果選擇此方案,我推薦第二種細(xì)化的方案。
4.3 Activity + Fragment 的方案
此禁止的主要就是開(kāi)啟新的 Activity,但是在同一個(gè) Activity 中,使用不同的 Fragment 來(lái)承載不同的業(yè)務(wù)功能,其實(shí)是可以的。
等于是把之前的 SplashActivity,變成 SplashFragment,在主頁(yè)上先添加 SplashFragment 來(lái)完成初始化或者廣告的顯示,在顯示完成之后,移除此 SplashFragment 就好。
這種方案其實(shí)是把舊的代碼結(jié)構(gòu)調(diào)整了,具體邏輯變動(dòng)并不大,唯一需要注意的依然是 Theme 的切換。
五. 小結(jié)時(shí)刻
每一次新系統(tǒng)的發(fā)布,或多或少都伴隨著開(kāi)發(fā)者的一波適配,大多數(shù)時(shí)候,官方也會(huì)給出明確的適配方案,來(lái)幫助開(kāi)發(fā)者更快適配新系統(tǒng)。
不過(guò)啟動(dòng)頁(yè)面限制這一項(xiàng),應(yīng)該不在 Android 適配規(guī)范的計(jì)劃內(nèi),國(guó)內(nèi)開(kāi)發(fā)者還是做好提前準(zhǔn)備。如果平時(shí)在項(xiàng)目迭代的時(shí)候就注意了很多代碼的規(guī)范,這些改動(dòng)就相對(duì)平滑一些。
https://developer.android.google.cn/preview/privacy/background-activity-starts
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JetBrains 全家桶宣布 10 月 1 日起漲價(jià),IntelliJ IDEA 新價(jià)格首年約
JetBrains 近期宣布,IDE、.NET 工具和 All Products Pack 將上調(diào)訂閱價(jià)格,下文小編為大家?guī)?lái)了詳細(xì)的介紹,大家趕緊看看吧2022-07-02IntelliJ IDEA 2022.1 正式版發(fā)布 (附更新內(nèi)容匯總)
IntelliJ IDEA 2022.1 現(xiàn)已正式推出,本文為大家?guī)?lái)了IntelliJ IDEA 2022.1 正式版發(fā)布 更新內(nèi)容匯總,感興趣的朋友一起看看吧2022-04-27.NET6系列之微軟正式宣布Visual Studio 2022
Visual Studio 的下一個(gè)主要版本將會(huì)更快、更平易近人、更輕量級(jí),為初學(xué)者和構(gòu)建工業(yè)規(guī)模解決方案的人而設(shè)計(jì)。更重要的是有史以來(lái)第一次,Visual Studio 將是64位的。用戶2021-05-27- Python 3.9 beta預(yù)計(jì)下個(gè)月就要發(fā)布了,那么3.9有那些讓我們期待的新功能和變更呢?感興趣的朋友跟隨小編一起看看都有哪些新功能吧2020-04-27
InterSystems宣布對(duì)InterSystems iKnow技術(shù)進(jìn)行開(kāi)源
InterSystems iKnow,即InterSystems IRIS數(shù)據(jù)平臺(tái)自然語(yǔ)言處理技術(shù),現(xiàn)在可以通過(guò)開(kāi)放源方式獲得,開(kāi)源使用戶能夠進(jìn)一步利用InterSystems iKnow先進(jìn)的自然語(yǔ)言處理能力2020-03-02Android Q 要來(lái)了,一個(gè)影響國(guó)內(nèi) 90% App 的適配項(xiàng)!
Android Q 在今年 Q3 就準(zhǔn)備發(fā)布正式版了,但有一個(gè)影響 90% 應(yīng)用的適配改動(dòng)。Android Q 具有更強(qiáng)的隱私保護(hù),其中有一條,它開(kāi)始限制后臺(tái) App 啟動(dòng) Activity。感興趣的可2019-08-13中國(guó)發(fā)布自主開(kāi)發(fā)域名系統(tǒng)基礎(chǔ)軟件"紅楓"(Maple DNS) 性能大
近日域名工程中心(英文縮寫(xiě) ZDNS)發(fā)布了宣稱自主開(kāi)發(fā)的域名系統(tǒng)基礎(chǔ)軟件"紅楓(Maple DNS)”。這一套高性能、智能化的基礎(chǔ)軟件,據(jù)說(shuō)性能大幅領(lǐng)先目前流行的BIND9軟2018-09-14地表最強(qiáng)IDE!微軟正式宣布Visual Studio 2019集成開(kāi)發(fā)環(huán)境
微軟宣布Visual Studio的下一個(gè)版本將被命名為Visual Studio 2019,不過(guò),微軟沒(méi)有詳細(xì)說(shuō)明該版本將包含哪些內(nèi)容,或者新功能將會(huì)是什么,如果您想嘗試最新最強(qiáng)大的功能,2018-06-07- 根據(jù)路透社報(bào)道稱,騰訊展示了“掃描微信跨境”程序,計(jì)劃利用微信取代內(nèi)地和香港特區(qū)之間傳統(tǒng)的旅行證件。如果這個(gè)程序被批準(zhǔn),以后人們將無(wú)需再隨身攜帶旅行證件2018-06-07
微博中招會(huì)癱瘓 iOS系統(tǒng)又出漏洞ZipperDown
蘋(píng)果iOS系統(tǒng)又有漏洞被爆出了,昨天盤古實(shí)驗(yàn)室發(fā)文表示,發(fā)現(xiàn)了iOS的一類通用漏洞,叫做ZipperDown2018-05-17