如何讓Android的service一直在後臺執行?
Service是Android四大元件之一,同時也是四大元件中和Activity最相似的元件,都代表著可執行的程式,他們的區別在於Service一直在後臺執行,沒有使用者介面,一旦被啟動就和Activiy一樣擁有生命週期,一般來說,需要顯示介面則使用Activity,不需要則可以選擇Service
Activity的生命週期在於使用者開啟與關閉,從使用者開啟程式到使用者關閉程式之間存在,那麼Service呢?他的生命週期在於什麼,是否也是在使用者的開啟與關閉,Service能否一直存在於後臺
一般情況下,只有系統自帶的應用或者廠商定製的應用擁有比較高的優先順序能夠保持後臺服務一直執行,也就是,可以透過root後給予相應高的許可權,理論上可以做到一直存在於後臺的服務,那麼對於未root的系統呢?
這時候就需要一些小技巧和方法
-
監聽開機事件,顯式啟動後臺服務,設定優先順序,使用AlarmManager傳送定時任務檢查是否執行,如果不允許就重新啟動
-
把service和activity分開,讓service開機啟動。設定一個broadcast receiver接受開機訊號,使用RECEIVE_BOOT_COMPLETED的permission, 然後啟動service。activity啟動後繫結到service上,透過ipc機制通訊,acitivity結束後鬆綁。注意安裝後要手動啟動service,不會自動啟動,之後重啟手機後才會隨開機啟動。
-
在記憶體低的時候系統會自動清理程式,這時候後臺service可能會被殺掉。可以在onStartCommand中返回START_STICKY,這樣系統有足夠多資源的時候,就會重新開啟service。
-
使用startForeground啟動後臺服務“前臺執行”的優先順序,類似於手機的音樂播放軟體,在開啟音樂播放軟體時會在通知欄顯示一條播放進度通知條,因為它能夠使後臺服務獲取到前臺的優先順序許可權從而避免被系統幹掉,這種做法也是官方所推薦的
“A started service can use the startForeground(int, Notification) API to put the service in a foreground state, where the system considers it to be something the user is actively aware of and thus not a candidate for killing when low on memory. (It is still theoretically possible for the service to be killed under extreme memory pressure from the current foreground application, but in practice this should not be a concern.)”
也就是說,其實第四種方法更為方便並且被官方所推薦
而 startForeground 的使用也是很簡單的,只需要修改onCreat的內容,在其中建立Notification物件,然後用呼叫 startForeground(1, Notification)即可實現
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2689841/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讓.py程式後臺執行(Linux)Linux
- 如何讓 ABAP 報表在後臺作業的模式下執行模式
- Android中後臺的服務和多執行緒Android執行緒
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- windows的nohup後臺執行Windows
- shell後臺執行
- Linux後臺執行Linux
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- 執行python指令碼後臺執行Python指令碼
- 如何使用WorkManager執行後臺任務(上)
- Android8.0以上版本啟動後臺service報IllegalStateExceptionAndroidException
- 後臺執行緒(daemon)執行緒
- Linux 後臺執行命令Linux
- jenkins後臺程式執行Jenkins
- 如何讓spring boot 啟動後就執行某個方法Spring Boot
- 將程式在後臺執行和殺掉後臺的程式
- Linux jar包 後臺執行LinuxJAR
- php返回資料後如何讓程式繼續執行其它操作PHP
- linux後臺執行命令:&與nohup的用法Linux
- Linux nohup:後臺不掛起命令(後臺執行命令)Linux
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- mysql後臺執行緒詳解MySql執行緒
- Linux程式後臺執行實踐Linux
- Mac Redis 服務後臺執行MacRedis
- [linux] 使用Screen後臺執行命令Linux
- 使用screen後臺執行任務
- 後臺執行SQL語句(oracle)SQLOracle
- Android入門教程 | 四大元件之Service(前臺服務,後臺服務)Android元件
- linux後臺執行和關閉、檢視後臺任務Linux
- scp 手動輸入密碼後後臺執行的方法密碼
- Golang 啟停管理及後臺執行Golang
- php後臺定時執行任務PHP
- XYHCMS 3.6 後臺程式碼執行漏洞
- 如何讓伺服器穩定執行?伺服器
- 讓字串執行的方式字串
- Android ServiceAndroid
- 如何使用ReentrantLock的條件變數,讓多個執行緒順序執行?ReentrantLock變數執行緒
- 如何讓 jenkins 上的 job,使用各自版本的 python 執行?JenkinsPython