綠色公約是AppSo與綠色守護(hù)聯(lián)合推出的一款綠色應(yīng)用軟件,主要是為了改善安卓手機(jī)卡、耗電快的問(wèn)題,目前已有2萬(wàn)多的支持,認(rèn)證的應(yīng)用也有13個(gè),可以說(shuō)是安卓手機(jī)的救星,有興趣的可以下載安卓綠色公約app體驗(yàn)一下。
自從推出這個(gè)公約后,AppSo 的后臺(tái)收到最多的質(zhì)疑是:這件事情太理想主義了,不僅是 Google 在國(guó)內(nèi)缺失的問(wèn)題,還有背后行業(yè)利益鏈等問(wèn)題,能成事的機(jī)會(huì)實(shí)在太渺茫了。
但在 Oasis Feng 心中,綠色守護(hù)(Greenify)這個(gè)產(chǎn)品,本身就是一次理想主義的嘗試。
它是一個(gè)誕生于 2012 年業(yè)余開(kāi)發(fā)的小工具,如今已經(jīng)走過(guò)了近 5 年的道路。5 年的堅(jiān)持,最大的動(dòng)力還是源于用戶的支持和那份單純的捐贈(zèng)。
相比五年前,Android 生態(tài)早已今非昔比,廠商和開(kāi)發(fā)者間的斗爭(zhēng),用戶成了最大的犧牲者,我們的手機(jī)內(nèi)存被大量重復(fù)的后臺(tái)推送服務(wù)給塞滿,國(guó)外 2G 內(nèi)存的手機(jī)就能流暢使用,在國(guó)內(nèi)連翻一番都捉襟見(jiàn)肘。
這場(chǎng)無(wú)盡之戰(zhàn)已深陷囚徒困境,每一個(gè)局中人都明知這是玉石俱焚,任何一方都無(wú)路可退。究其根源,還是互聯(lián)網(wǎng)長(zhǎng)期被扭曲的商業(yè)模式塑造了這一切,早已埋下了這一死局的種子。
這就是「綠色應(yīng)用公約」的誕生背景:先讓一部分有良知有擔(dān)當(dāng)?shù)膽?yīng)用團(tuán)隊(duì),在保全流量利益的大前提下,卸去對(duì)設(shè)備體驗(yàn)的傷害,轉(zhuǎn)而再推動(dòng)手機(jī)廠商卸去它們對(duì)這部分應(yīng)用的敵意和束縛,從而讓雙方都有機(jī)會(huì)攜手創(chuàng)造一個(gè)更加良性的國(guó)內(nèi) Android 生態(tài)。
今年初,我回阿里去做過(guò)一個(gè)內(nèi)部分享,其中一個(gè)主題是談的「流量圈地時(shí)代的終結(jié),對(duì)移動(dòng)應(yīng)用的發(fā)展會(huì)有什么沖擊」。實(shí)際上,當(dāng)流量圈地結(jié)束后,將迎來(lái)的是刺刀見(jiàn)紅的注意力肉搏戰(zhàn)。你搶奪的每一分用戶注意力,都是別人損失的用戶注意力。
移動(dòng)應(yīng)用最懼怕的用戶流失是什么?顯然是卸載。所以,好死不如賴活著,跪舔用戶的時(shí)代大潮很快就要到來(lái)了;其次是「打開(kāi)率」的問(wèn)題,當(dāng)應(yīng)用被大量后臺(tái)凍結(jié)、休眠后,也喪失了主動(dòng)激活用戶的機(jī)會(huì)。
當(dāng)然,這個(gè)趨勢(shì)肯定不是從巨頭開(kāi)始的,畢竟他們的提供了用戶無(wú)法割舍的服務(wù)。但是,行業(yè)中的先知先覺(jué)者,已經(jīng)意識(shí)到即將到來(lái)的問(wèn)題,開(kāi)始行動(dòng)了。
綠色守護(hù)聯(lián)合 AppSo 推出的「綠色應(yīng)用公約」,正是看準(zhǔn)了這個(gè)時(shí)代轉(zhuǎn)變的契機(jī),給中小應(yīng)用一個(gè)讓用戶無(wú)需卸載的理由,和免于被休眠的機(jī)會(huì);給行業(yè)第二、第三的挑戰(zhàn)者一個(gè)虎口拔牙的武器。
宗旨
這是一項(xiàng)旨在推動(dòng)Android生態(tài)中的優(yōu)秀應(yīng)用共同維護(hù)一個(gè)更加良性的『設(shè)備體驗(yàn)』而發(fā)起的開(kāi)放公約。
設(shè)備體驗(yàn):影響效應(yīng)超出用戶與應(yīng)用進(jìn)行顯性交互的過(guò)程之外,在用戶感知中屬于設(shè)備整體性的體驗(yàn)因素的總稱。包括設(shè)備的安全性、整體流暢性、耗電程度、發(fā)熱程度等。
由于Android系統(tǒng)的設(shè)備體驗(yàn)是由設(shè)備本身的軟硬件及安裝在設(shè)備中的眾多應(yīng)用所共同影響的,后者的影響往往隨著安裝的應(yīng)用數(shù)量增長(zhǎng)而迅速擴(kuò)大。這種由應(yīng)用所造成的外溢性影響,存在著典型的 『公地悲劇』 。安裝的眾多應(yīng)用中,某一個(gè)應(yīng)用對(duì)于設(shè)備體驗(yàn)的損害往往很難被用戶直接辨識(shí),以至設(shè)備體驗(yàn)問(wèn)題長(zhǎng)期得不到應(yīng)用開(kāi)發(fā)團(tuán)隊(duì)的足夠重視。造成的后果間接的由全部應(yīng)用,乃至整個(gè)Android生態(tài)共同承擔(dān)。
因此,除了加強(qiáng)用戶對(duì)于設(shè)備體驗(yàn)損害的辨識(shí)能力外,有必要推動(dòng)整個(gè)Android開(kāi)發(fā)社區(qū)以更高的標(biāo)準(zhǔn)優(yōu)化各自應(yīng)用的設(shè)備體驗(yàn)影響,共同維護(hù)一個(gè)良性的Android生態(tài)。
開(kāi)放編撰
此公約的內(nèi)容修訂和擴(kuò)充面向整個(gè)Android開(kāi)發(fā)社區(qū),采取開(kāi)放接納、充分討論、積極修訂的原則。如果對(duì)規(guī)約有任何的疑問(wèn)(包括實(shí)施中的困難)和建議,請(qǐng)通過(guò)此公約的 GitHub issue tracker 提交。
核心原則
此公約的核心原則完全遵照Android本身的演進(jìn)方向(包括 Android O 所引入的新變化),積極引導(dǎo)和協(xié)助應(yīng)用開(kāi)發(fā)團(tuán)隊(duì)平滑完成對(duì)接Android最新變化的節(jié)奏,在確保應(yīng)用核心功能不受影響的前提下,減少不必要的應(yīng)用后臺(tái)行為,并以更加高效、節(jié)能的調(diào)度機(jī)制改善后臺(tái)行為的調(diào)度。
涉及到功能與設(shè)備體驗(yàn)之間的潛在沖突時(shí),遵循最終選擇權(quán)給予用戶的原則。
必要部分
1, Target SDK Version >= 24 (Android 7.0)
原因:Project Svelte在Android 7中得到了一些關(guān)鍵的的強(qiáng)化,有助于降低應(yīng)用后臺(tái)行為對(duì)設(shè)備體驗(yàn)的影響。
2, 不在運(yùn)行時(shí)強(qiáng)制請(qǐng)求『讀取手機(jī)狀態(tài)和身份(READ_PHONE_STATE)』權(quán)限。
原因:IMEI泄露是目前用戶隱私和手機(jī)安全中的一個(gè)突出問(wèn)題。它具有相當(dāng)?shù)碾[蔽性,在Android 6.0之后的運(yùn)行期權(quán)限體系中依然未能獲得足夠清晰的信息披露。由于Android系統(tǒng)僅僅將其顯示為『讀取手機(jī)狀態(tài)和身份』,使得大部分用戶在應(yīng)用請(qǐng)求此項(xiàng)權(quán)限時(shí)雖然困惑,但仍未意識(shí)到授予這個(gè)權(quán)限背后存在的安全隱患。
若應(yīng)用中的某些功能(如通話相關(guān)的特性)依賴此權(quán)限(須具備邏輯上的合理性),則只能在對(duì)應(yīng)功能交互中請(qǐng)求此權(quán)限。即便用戶拒絕授予權(quán)限,不依賴此權(quán)限的功能仍須保持可用。
3, 除用戶的主動(dòng)交互觸發(fā)外,避免啟動(dòng)其它應(yīng)用未處于運(yùn)行中的進(jìn)程。
原因:用戶在主動(dòng)交互中通常對(duì)交互的響應(yīng)時(shí)間(例如從觸摸到界面變化)存在一定的寬容度,而被動(dòng)交互(例如啟動(dòng)過(guò)程的等待、媒體播放中)中出現(xiàn)的延遲或卡頓更易引發(fā)用戶的反感。此間如果涉及到啟動(dòng)多個(gè)進(jìn)程,除進(jìn)程創(chuàng)建本身的顯著開(kāi)銷和內(nèi)存壓力之外,如果啟動(dòng)的是其它應(yīng)用的進(jìn)程(即通常所說(shuō)的『交叉喚醒』),對(duì)方的初始化開(kāi)銷則是一個(gè)完全不可控的因素。而交叉喚醒在應(yīng)用之間往往具有連鎖效應(yīng),在安裝有較多關(guān)聯(lián)應(yīng)用(例如集成了相同SDK的多個(gè)應(yīng)用)的情況下極易觸發(fā)『鏈?zhǔn)絾拘选,引發(fā)CPU、內(nèi)存、IO等資源短時(shí)間內(nèi)的巨大壓力,造成設(shè)備流暢性的急劇下降、耗電上升,帶來(lái)嚴(yán)重的應(yīng)用啟動(dòng)階段用戶體驗(yàn)和全局設(shè)備體驗(yàn)的雙重?fù)p害。
4,使用請(qǐng)求喚醒CPU的周期性Alarm、JobScheduler的周期最小不低于30分鐘,建議不低于1小時(shí)。避免在不必要的時(shí)間段(如夜間)繼續(xù)調(diào)度周期性事件
原因:周期性喚醒CPU會(huì)打斷設(shè)備的深度睡眠狀態(tài),造成設(shè)備待機(jī)時(shí)長(zhǎng)的明顯縮短。按照Google在Project Volta中的粗略測(cè)算,設(shè)備每1秒鐘的活躍工作會(huì)讓待機(jī)時(shí)間損失大約2分鐘。大部分應(yīng)用的后臺(tái)周期性任務(wù)往往以網(wǎng)絡(luò)訪問(wèn)為主,通常會(huì)持續(xù)數(shù)秒至數(shù)十秒(甚至超過(guò)1分鐘)。如果此類周期性后臺(tái)活動(dòng)調(diào)度過(guò)于頻繁,對(duì)待機(jī)時(shí)間的影響是極其顯著的。Android從4.4開(kāi)始,不斷在迭代中優(yōu)化周期任務(wù)的后臺(tái)調(diào)度,但所有這些努力都只能在長(zhǎng)周期任務(wù)中產(chǎn)生明顯的效果。倘若有一個(gè)應(yīng)用請(qǐng)求過(guò)于頻密的周期任務(wù),則整個(gè)系統(tǒng)的待機(jī)時(shí)長(zhǎng)就會(huì)因?yàn)槎棠就靶?yīng)而受制,
5,為用戶提供可達(dá)成『后臺(tái)純凈 (Background-free)』目標(biāo)的選項(xiàng)。(不必默認(rèn)開(kāi)啟)
原因:后臺(tái)持續(xù)運(yùn)行的服務(wù),是一系列設(shè)備體驗(yàn)問(wèn)題的溫床,如長(zhǎng)連接基帶持續(xù)工作增加的耗電、低內(nèi)存時(shí)服務(wù)循環(huán)重啟引起的設(shè)備遲緩、間歇性CPU和IO資源占用造成的卡頓…… 后臺(tái)純凈是Android O對(duì)應(yīng)用后臺(tái)約束的一項(xiàng)重大原則性變化,它倡導(dǎo)的是『如非必要,勿啟后臺(tái)』的新原則。
后臺(tái)純凈 (Background-free):指符合面向Android O的應(yīng)用開(kāi)發(fā)要求中關(guān)于后臺(tái)運(yùn)行的約束。其核心要求是應(yīng)用進(jìn)入后臺(tái)短時(shí)間內(nèi)(至多3分鐘,并在屏幕關(guān)閉前)停止所有后臺(tái)服務(wù),且在除了收到廣播和執(zhí)行來(lái)自通知的PendingIntent之外的其它條件(如JobScheduler)觸發(fā)的后臺(tái)行為期間不可以再啟動(dòng)新的后臺(tái)服務(wù)。
6, 對(duì)于存在內(nèi)容更新、數(shù)據(jù)同步或弱實(shí)時(shí)性通知的應(yīng)用場(chǎng)景,建議在『后臺(tái)純凈』模式下以周期性輪詢替代推送。 (參見(jiàn)前述的最低周期約束)
對(duì)于Android 5.0及以上版本的系統(tǒng),不在AndroidManifest.xml中靜態(tài)注冊(cè)以下廣播:(從Android O開(kāi)始,以下全部廣播均已不再支持靜態(tài)注冊(cè))
網(wǎng)友評(píng)論