Android進程保活

凡是做過幾年Android開發的,都不能不面對進程保活這一問題。特別是這兩年,面對谷歌,國內定制ROM,安全軟件等多方圍剿的情況下,app在后臺保活的難度越來越大,可以說包括QQ、微信在內的所有app,都無法做到一直運行于后臺。因此,進程保活一直都是Android開發的一大難題。

Android進程保活工作包含兩部分:

1、如何盡量保持進程不被殺死

2、當進程被殺死時,如何重新啟動

如何盡量保持進程不被殺死?

如何盡量保持進程不被殺死?這個就必須說到進程優先級?(具體可自行百度),我們需要了解的進程優先級主要有五個:前臺進程,可見進程,服務進程,后臺進程(緩存進程),空進程。顯而易見,不希望進程被殺死,就需要保持其有一個高的優先級。

因此,幫助進程獲取高優先級是一種保活方式,具體實現包括:

1、app進入后臺時綁定一個透明的Activity(建議在鎖屏時開啟activity,解鎖后結束activity,針對Android鎖屏5s后自動結束后臺進程的設定)

2、后臺服務設置startForeground/setForeground(此時需要在系統的通知欄發送一條通知)。

3、application設置persistent屬性,即標注為常駐進程

另外,進程為什么會被殺死?這個主要分三種情況:用戶主動終止進程,后臺進程管理軟件殺掉進程,系統資源不夠自動干掉進程(與進程優先級及資源占用有關)。前兩者我們不可控,但第三中情況可以進行優化。前面說到了進程優先級,那現在就說說內存占用。理論上,如果內存足夠大,那空進程以外的進程都不會有被自動殺死的風險,而實際上,內存是有限的,那我們能做的就只有減少內存占用(同一進程優先級,系統也會根據進入后臺的時間長短、內存占用大小等去殺死進程)。

1、app內存優化,這個是一款合格app必須做到,不多說

2、減少服務/后臺進程的內存占用(比如讓服務運行在非進程中,在AndroidManifest.xml中配置android:process)

如何進行進程拉活?

前面提高進程優先級,減少內存占用等,都只是盡可能的降低進程被kill的手段,進程被殺死時不可避免的。那么,當進程被殺死時,我們就需要考慮如何將其重新開啟,即進程拉活,這是進程保活的關鍵。

這個相信做Android的都會一些:

1、監聽系統靜態廣播(受系統限制,可能不同版本某些廣播接收不到)

2、service的onStartCommand方法里返回 STATR_STICK,onDestory中start自啟(準確的將算不上進程拉活,只能算service自啟,force_stop后不能正常拉活)

3、監聽第三方app開放的靜態廣播(需要大量反編譯app去找開放的靜態廣播,而且不保證長期有效,可能第三方開放廣播在版本升級時改為私有廣播,如果自己公司有多個app,可廣播互相拉起)

4、利用AlarmManager定時喚起(killBackgroundProcess可以喚起但force-stop后無法喚起)

5、守護進程(一般采用Native進程,5.0以下拉活沒問題,5.0以上由于改為殺死進程的同時干掉了進程組,所以父子型守護進程將無法保證重啟)

6、雙Native獨立進程,互相守護(對5、守護進程的補充,非父子關系,這種方式在github上看到過開源項目MarsDaemon?,但僅兼容到Android6.0)

7、利用賬戶同步,定時喚醒(用到ContentProvider及SyncAdapter,①需要用戶手動設置賬戶,②因為賬戶同步是定時的,喚起周期長,不能即使喚起,③在Android N以下系統一般都能正常喚起,Android N失效)

8、使用JobSheduler機制保活(Android5.x、6.x有效,但AndroidN失效,Android N可以了解下scheduleAsPackage)

9、notificationListenerService(Android4.3+)(需要用戶授權,通過用戶授權來獲取到特定權限達到保活的目的,Android4.3以下參考AccessibilityService)

ps:隨著Android版本的不斷更新及國內廠商對ROM的不斷優化,如何最大可能的對進程保活,是Android一道需要長期學習/鉆研的學問,也是Android開發者不得不面對的問題。這里只是提到一些保活的手段,具體如何實現,基本根據上述關鍵字百度都可以搜到。后續有時間可能會另寫幾篇相關實現方法的文章。

轉自我的簡書

轉載于:https://www.cnblogs.com/e7yoo/p/7928503.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252797.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

治安卡口攝像機與電警抓拍機之間有什么區別?

接下來小編和大家說說它們有哪些相同和不同的地方,供大家參考。 治安卡口: 卡口攝像機主要是用于城市道路或高速公路出入口、收費站等重點治安監控地段的全天候實時檢測與記錄收費站、交通或治安檢查站等地點。 治安卡口監控系統的前端部分主要由三個單元…

https證書互信解決方案—創建私有CA并申請證書

前言 https相較于http而言有很大的安全性,當我們一個服務開啟https并與之通信時,往往需要證書的認證,如果是瀏覽器訪問服務,只要在瀏覽器內設置信任證書即可,而如果是程序內訪問服務(如java程序&#xff09…

[轉]Unity-移動設備可用的壓縮解壓縮源碼

原文:http://www.manew.com/thread-103250-1-1.html 最近在做客戶端數據的分離,不希望對項目有什么影響,也不太想用AssetBundle,太麻煩,就在網上找了找開源的C#壓縮算法,找來找去,發現不是不支持…

高亮顯示QSS文件

轉【作者:一去丶二三里 博客地址:http://blog.csdn.net/liang19890820】 簡述 語法高亮是文本編輯器用來顯示文本的,特別是源代碼,根據不同的類別來用不同的顏色和字體顯示。這個功能有助于編寫結構化的語言,例如&…

智能識別技術對電子警察設備的影響

電子警察是目前交通管理部門用的最多的一種監控管理系統。這類系統與傳統安防的監控設備有很大區別,原先的系統只能抓拍車輛圖片,準確率又低所以被交通管理部門慢慢的淘汰了,同業興創這款最新的設備系統,有它一個很優質的特點就是…

Mybatis緩存配置

pom文件配置: <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version> </dependency> <dependency><groupId>org.mybatis</groupId><artifactId>myba…

初入Linux,M35作業第一彈,500字感想

畢業以后&#xff0c;做過很多工作&#xff0c;一直比較迷茫。來這邊上課&#xff0c;其實是我的好同學推薦我來報班的&#xff0c;因為他本身是做運維的&#xff0c;運維前景還可以&#xff0c;而且我對這個也感興趣。有一種冷&#xff0c;叫你媽覺得你冷&#xff0c;明明單衣…

【轉】一篇比較清晰簡單的C++文件操作

from:http://www.vckbase.com/document/viewdoc/?id1439 用C進行簡單的文件I/O操作 原文出處&#xff1a;Simple File I/O Using C 序論 我曾發表過文件輸入輸出的文章&#xff0c;現在覺得有必要再寫一點。文件 I/O 在C中比烤蛋糕簡單多了。 在這篇文章里&#xff0c;我 會詳…

交通治安卡口監控系統解決方案

隨著社會經濟發展、城鎮建設速度的加快&#xff0c;流動人口不斷增加&#xff0c;城市中人口密度逐漸加大&#xff0c;給城市治安監管帶來很大的壓力。因此采用高清網絡攝像監控系統以科技手段提高執法監督效率&#xff0c;成為有力推進“和諧社會”構建的最有力辦法。 同業興創…

細說shiro之三:在獨立應用中使用shiro

官網&#xff1a;https://shiro.apache.org/ 1. 下載在非Web環境的獨立應用中使用Shiro時&#xff0c;只需要shiro-core組件。在Maven項目中的依賴配置如下&#xff1a; <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</a…

高并發架構系列:Redis為什么是單線程、及高并發快的3大原因詳解

Redis的高并發和快速原因 1.redis是基于內存的&#xff0c;內存的讀寫速度非常快&#xff1b;2.redis是單線程的&#xff0c;省去了很多上下文切換線程的時間&#xff1b;3.redis使用多路復用技術&#xff0c;可以處理并發的連接。非阻塞IO 內部實現采用epoll&#xff0c;采用了…

2、C#基礎 - Visual Studio 的版本選擇和下載

有句話說&#xff1a;工欲善其事&#xff0c;必先利其器&#xff0c;我不推薦在學習一個語言時使用記事本練習&#xff0c;甚至說相當的排斥。當然了&#xff0c;你也可以選擇你自己喜歡的方式。本系列推薦使用的IDE為vs2017 community版&#xff0c;銀子不夠的同志不用怕&…

紅外攝像機的原理及選擇

一、紅外基本原理介紹 光是一種電磁波&#xff0c;它的波長區間從幾個納米&#xff08;1nm10-9m&#xff0c;十億分之一米&#xff09;到 1 毫米&#xff08;mm&#xff09;左右。人眼可見的只是其中一部分&#xff0c;我們稱其為可見光&#xff0c;可見光的波長范圍為 380nm …

第六章 預處理器

宏就是文字展開&#xff0c;實際中能夠展開寫出來發現錯誤。6.1 不能忽視宏定義中的空格 6.2 宏并非函數宏定義一個函數時&#xff0c;1、要把每一個參數用括號括起來2、同一時候也要把整個表達式括起來。3、要確保宏中的參數沒有副作用#define max(a,b) ((a)>(b)?(a):(b)…

oracle 數據庫中執行數據庫語句能找到數據,但是程序中卻抓取不到

oracle 數據庫中執行數據庫語句能找到數據&#xff0c;但是程序中卻抓取不到&#xff1f; 原因&#xff1a;數據庫中插入數據時沒有commit&#xff0c;執行COMMIT后就可以查詢到。轉載于:https://www.cnblogs.com/hanje/p/10140307.html

Python3經典100道練習題003

題目&#xff1a;一個整數&#xff0c;它加上100后是一個完全平方數&#xff0c;再加上268又是一個完全平方數&#xff0c;請問該數是多少&#xff1f; 方法&#xff1a;利用循環去判斷x100和x268是否為完全平方數&#xff0c;沒用使用其他函數&#xff0c;缺點運算速度慢 1 x-…

紅外攝像機

在監控市場中&#xff0c;紅外攝像機之所以那么受市場的歡迎&#xff0c;主要還是因為它有強勁的夜視性能。市場上&#xff0c;普通的彩色攝像機基本上沒有夜視能力&#xff0c;如果需要在夜晚獲得清晰的圖像&#xff0c;必須借助額外的可見光源照明才能實現。那么監控攝像機系…

P3375 【模板】KMP字符串匹配

題目描述 如題&#xff0c;給出兩個字符串s1和s2&#xff0c;其中s2為s1的子串&#xff0c;求出s2在s1中所有出現的位置。 為了減少騙分的情況&#xff0c;接下來還要輸出子串的前綴數組next。如果你不知道這是什么意思也不要問&#xff0c;去百度搜[kmp算法]學習一下就知道了。…

[譯] 用 Shadow DOM v1 和 Custom Elements v1 實現一個原生 Web Component

原文地址&#xff1a;Make a Native Web Component with Custom Elements v1 and Shadow DOM v1原文作者&#xff1a;Pearl Latteier譯文出自&#xff1a;掘金翻譯計劃本文永久鏈接&#xff1a;github.com/xitu/gold-m…譯者&#xff1a;newraina校對者&#xff1a;CoderMing假…

php 原生文件下載

1.整個網頁的html界面源碼下載: xiazai.php <html> <head> <meta charset "utf-8"> <title></title> </head> <body> <form method"post" action"xiazai.php"> <input type"submit&quo…