首先申明姿搜,要搞流氓軟件請繞路寡润,我們今天講的是正常應(yīng)用的需求。我們知道痪欲,通過android手機(jī)在鎖屏、HOME鍵攻礼,菜單鍵選擇了別的App后业踢,先前用戶正在看的App就看不見了,退到了后臺礁扮,android系統(tǒng)不會馬上關(guān)閉這些后臺的App知举,而是在系統(tǒng)認(rèn)為合適的時候,才會去關(guān)閉它太伊,比如系統(tǒng)發(fā)現(xiàn)手機(jī)內(nèi)存不夠了雇锡。
那么,有沒有辦法僚焦,不讓系統(tǒng)關(guān)閉我們已經(jīng)處于后臺工作的App呢锰提?比如一個騎行軟件,這種app要求用戶鎖屏后芳悲,后臺要一直運(yùn)行立肘,用來記錄用戶的定位數(shù)據(jù),形成一條完整的騎行路線名扛,以便用戶隨時查看自己的歷史騎行軌跡谅年,這就涉及到App要在后臺一直運(yùn)行,否則用戶辛辛苦苦騎行的數(shù)據(jù)就容易丟失肮韧。嚴(yán)格意義講融蹂,系統(tǒng)擁有最高權(quán)限,它硬要關(guān)閉你的App弄企,你是無能為力的超燃,下面要講述的方法只是讓你處于后臺的App能盡量不被系統(tǒng)關(guān)閉。
一拘领、前臺服務(wù)
App可以通過注冊一個前臺服務(wù)Forground Service淋纲,開啟了前臺服務(wù)的App優(yōu)先級要更高。Google官方為了應(yīng)對流氓軟件院究,在安卓4.3以上的系統(tǒng)的通知欄上會顯示“XX正在后臺運(yùn)行”洽瞬,這對正常App基本沒有什么影響本涕,用戶本來就知道我們App在后臺跑。
二伙窃、獨立進(jìn)程
App可以開啟一個獨立進(jìn)程菩颖,來運(yùn)行需要跑在后臺的功能。android系統(tǒng)關(guān)閉后臺會選擇占用資源比較多的優(yōu)先釋放为障。因此這個做法要注意晦闰,在這個進(jìn)程獨立運(yùn)行的功能要精煉,類似一個很小的獨立的服務(wù)鳍怨,這樣即使主進(jìn)程被系統(tǒng)關(guān)閉呻右,這個獨立進(jìn)程還在運(yùn)行。當(dāng)然鞋喇,你可以設(shè)置進(jìn)程相互喚醒的機(jī)制來提高App駐留內(nèi)存的幾率声滥。獨立進(jìn)程最大的問題是,它與主進(jìn)程之間的數(shù)據(jù)通信侦香。
三落塑、透明懸浮窗
我們知道,App可以在安卓系統(tǒng)中顯示懸浮窗罐韩,開啟懸浮窗的App不會被系統(tǒng)隨便清理掉憾赁。因此,可以設(shè)置一個大小為1像素的透明懸浮窗散吵,這樣用戶是看不到的龙考。App退到后臺后,由于有懸浮窗的存在矾睦,進(jìn)程也得以保留洲愤。這個方法也已經(jīng)被Google所察覺,在新版的安卓系統(tǒng)以及很多第三方ROM中顷锰,App已經(jīng)不能隨便申請到懸浮窗的權(quán)限柬赐。
四、播放音頻
咋一看這個標(biāo)題很奇怪官紫,其實一點都不會肛宋。我們聽音樂的時候,經(jīng)常都要鎖屏在后臺播放音樂束世,但是我們很少說酝陈,聽一半音樂會被系統(tǒng)關(guān)掉。這說明音樂播放在后臺是擁有很高權(quán)限的毁涉,系統(tǒng)是輕易不會關(guān)閉的沉帮。那么,我們要怎么做呢?可以先找一個沒有聲音的音樂文件穆壕,比如xxx.mp3待牵,然后App內(nèi)開啟一個播放器,循環(huán)播放這個音樂文件喇勋。當(dāng)我們App退到后臺之后缨该,因為還有音樂一直在播放,所以系統(tǒng)認(rèn)為優(yōu)先級更高川背,不會輕易關(guān)掉贰拿。這個方法比上面的方法要有效的多,它最大的缺點是很耗電熄云。一個可行的做法是:在設(shè)置里添加一個選擇開關(guān)膨更,讓用戶自己選擇是否開啟。當(dāng)用戶的App在后臺比較容易被系統(tǒng)關(guān)閉時缴允,就建議用戶自己開啟這個選項荚守,但同時警告說會比較耗電。這個方法有點流氓癌椿,非到萬不得已健蕊,不建議使用菱阵。
當(dāng)然踢俄,根據(jù)系統(tǒng)會優(yōu)先關(guān)閉占用資源的后臺App的特點,還有一些技巧晴及,比如圖片都办、音視頻資源沒用了,要盡快從內(nèi)存中釋放虑稼;耗電大的功能也要適時關(guān)閉等等琳钉,就不一一列舉了。