小編給大家分享一下Android后臺運(yùn)行白名單實(shí)現(xiàn)?;畹姆椒?,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營銷、管理等多方位專業(yè)化運(yùn)作于一體。
?;瞵F(xiàn)狀
我們知道,Android 系統(tǒng)會存在殺后臺進(jìn)程的情況,并且隨著系統(tǒng)版本的更新,殺進(jìn)程的力度還有越來越大的趨勢。系統(tǒng)這種做法本身出發(fā)點(diǎn)是好的,因?yàn)榭梢怨?jié)省內(nèi)存,降低功耗,也避免了一些流氓行為。
但有一部分應(yīng)用,應(yīng)用本身的使用場景就需要在后臺運(yùn)行,用戶也是愿意讓它在后臺運(yùn)行的,比如跑步類應(yīng)用。一方面流氓軟件用各種流氓手段進(jìn)行?;?,另一方面系統(tǒng)加大殺后臺的力度,導(dǎo)致我們一些真正需要在后臺運(yùn)行的應(yīng)用被誤殺,苦不堪言。
優(yōu)雅?;??
為了做到?;睿霈F(xiàn)了不少「黑科技」,比如 1 個(gè)像素的 Activity,播放無聲音頻,雙進(jìn)程互相守護(hù)等。這些做法可以說是很流氓了,甚至破壞了 Android 的生態(tài),好在隨著 Android 系統(tǒng)版本的更新,這些非常規(guī)的?;钍侄魏芏喽家咽Я?。
對于那些確實(shí)需要在后臺運(yùn)行的應(yīng)用,我們?nèi)绾巫龅絻?yōu)雅的?;钅??
后臺運(yùn)行白名單
從 Android 6.0 開始,系統(tǒng)為了省電增加了休眠模式,系統(tǒng)待機(jī)一段時(shí)間后,會殺死后臺正在運(yùn)行的進(jìn)程。但系統(tǒng)會有一個(gè)后臺運(yùn)行白名單,白名單里的應(yīng)用將不會受到影響,在原生系統(tǒng)下,通過「設(shè)置」 - 「電池」 - 「電池優(yōu)化」 - 「未優(yōu)化應(yīng)用」,可以看到這個(gè)白名單,通常會看到下面這兩位:
可以看到,這個(gè)系統(tǒng)彈窗會有影響電池續(xù)航的提醒,所以如果想讓用戶點(diǎn)允許,必須要有相關(guān)的說明。如果要判斷用戶是否點(diǎn)擊了允許,可以在申請的時(shí)候調(diào)用 startActivityForResult,在 onActivityResult 里再判斷一次是否在白名單中。
廠商后臺管理
Android 開發(fā)的一個(gè)難點(diǎn)在于,各大手機(jī)廠商對原生系統(tǒng)進(jìn)行了不同的定制,導(dǎo)致我們需要進(jìn)行不同的適配,后臺管理就是一個(gè)很好的體現(xiàn)。幾乎各個(gè)廠商都有自己的后臺管理,就算應(yīng)用加入了后臺運(yùn)行白名單,仍然可能會被廠商自己的后臺管理干掉。
如果能把應(yīng)用加入廠商系統(tǒng)的后臺管理白名單,可以進(jìn)一步降低進(jìn)程被殺的概率。不同的廠商在不同的地方進(jìn)行設(shè)置,一般是在各自的「手機(jī)管家」,但更難的是,就算同一個(gè)廠商的系統(tǒng),不同的版本也可能是在不同地方設(shè)置。
最理想的做法是,我們根據(jù)不同手機(jī),甚至是不同的系統(tǒng)版本,給用戶呈現(xiàn)一個(gè)圖文操作步驟,并且提供一個(gè)按鈕,直接跳轉(zhuǎn)到指定頁面進(jìn)行設(shè)置。但需要對每個(gè)廠商每個(gè)版本進(jìn)行適配,工作量是比較大的。我使用真機(jī)測試了大部分主流 Android 廠商的手機(jī)后,整理出了部分手機(jī)的相關(guān)資料。
首先我們可以定義這樣兩個(gè)方法:
/** * 跳轉(zhuǎn)到指定應(yīng)用的首頁 */ private void showActivity(@NonNull String packageName) { Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); startActivity(intent); } /** * 跳轉(zhuǎn)到指定應(yīng)用的指定頁面 */ private void showActivity(@NonNull String packageName, @NonNull String activityDir) { Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, activityDir)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
以下是部分手機(jī)的廠商判斷,跳轉(zhuǎn)方法及對應(yīng)設(shè)置步驟,跳轉(zhuǎn)方法不保證在所有版本上都能成功跳轉(zhuǎn),都需要加 try catch。
華為
廠商判斷
public boolean isHuawei() { if (Build.BRAND == null) { return false; } else { return Build.BRAND.toLowerCase().equals("huawei") || Build.BRAND.toLowerCase().equals("honor"); } }
跳轉(zhuǎn)華為手機(jī)管家的啟動管理頁:
private void goHuaweiSetting() { try { showActivity("com.huawei.systemmanager", "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity"); } catch (Exception e) { showActivity("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.bootstart.BootStartActivity"); } }
操作步驟:應(yīng)用啟動管理 -> 關(guān)閉應(yīng)用開關(guān) -> 打開允許自啟動
小米
廠商判斷
public static boolean isXiaomi() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("xiaomi"); }
跳轉(zhuǎn)小米安全中心的自啟動管理頁面:
private void goXiaomiSetting() { showActivity("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"); }
操作步驟:授權(quán)管理 -> 自啟動管理 -> 允許應(yīng)用自啟動
OPPO
廠商判斷
public static boolean isOPPO() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("oppo"); }
跳轉(zhuǎn) OPPO 手機(jī)管家:
private void goOPPOSetting() { try { showActivity("com.coloros.phonemanager"); } catch (Exception e1) { try { showActivity("com.oppo.safe"); } catch (Exception e2) { try { showActivity("com.coloros.oppoguardelf"); } catch (Exception e3) { showActivity("com.coloros.safecenter"); } } } }
操作步驟:權(quán)限隱私 -> 自啟動管理 -> 允許應(yīng)用自啟動
VIVO
廠商判斷
public static boolean isVIVO() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("vivo"); }
跳轉(zhuǎn) VIVO 手機(jī)管家:
private void goVIVOSetting() { showActivity("com.iqoo.secure"); }
操作步驟:權(quán)限管理 -> 自啟動 -> 允許應(yīng)用自啟動
魅族
廠商判斷
public static boolean isMeizu() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("meizu"); }
跳轉(zhuǎn)魅族手機(jī)管家:
private void goMeizuSetting() { showActivity("com.meizu.safe"); }
操作步驟:權(quán)限管理 -> 后臺管理 -> 點(diǎn)擊應(yīng)用 -> 允許后臺運(yùn)行
三星
廠商判斷
public static boolean isSamsung() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("samsung"); }
跳轉(zhuǎn)三星智能管理器:
private void goSamsungSetting() { try { showActivity("com.samsung.android.sm_cn"); } catch (Exception e) { showActivity("com.samsung.android.sm"); } }
操作步驟:自動運(yùn)行應(yīng)用程序 -> 打開應(yīng)用開關(guān) -> 電池管理 -> 未監(jiān)視的應(yīng)用程序 -> 添加應(yīng)用
樂視
廠商判斷
public static boolean isLeTV() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("letv"); }
跳轉(zhuǎn)樂視手機(jī)管家:
private void goLetvSetting() { showActivity("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"); }
操作步驟:自啟動管理 -> 允許應(yīng)用自啟動
錘子
廠商判斷
public static boolean isSmartisan() { return Build.BRAND != null && Build.BRAND.toLowerCase().equals("smartisan"); }
跳轉(zhuǎn)手機(jī)管理:
private void goSmartisanSetting() { showActivity("com.smartisanos.security"); }
操作步驟:權(quán)限管理 -> 自啟動權(quán)限管理 -> 點(diǎn)擊應(yīng)用 -> 允許被系統(tǒng)啟動
友商致敬?
在之前做的跑步應(yīng)用中,我在設(shè)置里增加了一個(gè)權(quán)限設(shè)置頁面,將上面提到的以及一些運(yùn)行所必須的權(quán)限設(shè)置放在這里面。最近發(fā)現(xiàn)友商某咚也跟進(jìn)了,圖 1 是我們做的,圖 2 是某咚做的:
Android后臺運(yùn)行白名單實(shí)現(xiàn)?;畹姆椒?/a>
地址分享:http://muchs.cn/article34/pisspe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、關(guān)鍵詞優(yōu)化、服務(wù)器托管、搜索引擎優(yōu)化、App開發(fā)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)