Android提高Service優(yōu)先級的方法分析
本文實例講述了Android提高Service優(yōu)先級的方法。分享給大家供大家參考,具體如下:
Android 系統(tǒng)對于內存管理有自己的一套方法,為了保障系統(tǒng)有序穩(wěn)定的運信,系統(tǒng)內部會自動分配,控制程序的內存使用。當系統(tǒng)覺得當前的資源非常有限的時候,為了保 證一些優(yōu)先級高的程序能運行,就會殺掉一些他認為不重要的程序或者服務來釋放內存。這樣就能保證真正對用戶有用的程序仍然再運行。如果你的 Service 碰上了這種情況,多半會先被殺掉。但如果你增加 Service 的優(yōu)先級就能讓他多留一會,我們可以用 setForeground(true) 來設置 Service 的優(yōu)先級。
為什么是 foreground ? 默認啟動的 Service 是被標記為 background,當前運行的 Activity 一般被標記為 foreground,也就是說你給 Service 設置了 foreground 那么他就和正在運行的 Activity 類似優(yōu)先級得到了一定的提高。當讓這并不能保證你得 Service 永遠不被殺掉,只是提高了他的優(yōu)先級。
從Android 1.5開始,一個已啟動的service可以調用startForeground(int, Notification)將service置為foreground狀態(tài),調用stopForeground(boolean)將service置為 background狀態(tài)。
我們會在調用startForeground(int, Notification)傳入?yún)?shù)notification,它會在狀態(tài)欄里顯示正在進行的foreground service。background service不會在狀態(tài)欄里顯示。
在Android 1.0中,將一個service置為foreground狀態(tài):
setForeground(true); mNM.notify(id, notification);
將一個service置為background狀態(tài):
mNM.cancel(id); setForeground(false);
對比看出,在1.0 API中調用setForeground(boolean)只是簡單的改變service的狀態(tài),用戶不會有任何覺察。新API中強制將 notification和改變service狀態(tài)的動作綁定起來,foreground service會在狀態(tài)欄顯示,而background service不會。
Remote service controller & binding
跨進程調用Service。暫時不研究。
更多關于Android相關內容感興趣的讀者可查看本站專題:《Android數(shù)據(jù)庫操作技巧總結》、《Android編程之activity操作技巧總結》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
相關文章
Android開發(fā)Jetpack組件WorkManager用例詳解
這篇文章主要為大家介紹了Android開發(fā)Jetpack組件WorkManager的使用案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02Android shell命令行中過濾adb logcat輸出的方法
本文主要介紹Android shell命令行中過濾adb logcat輸出,這里詳細說明了shell 命令過濾logcat 輸出內容,有需要的小伙伴可以參考下2016-08-08Android7.0開發(fā)實現(xiàn)Launcher3去掉應用抽屜的方法詳解
這篇文章主要介紹了Android7.0開發(fā)實現(xiàn)Launcher3去掉應用抽屜的方法,結合實例形式分析了Android7.0 Launcher3調整界面布局的相關操作技巧與注意事項,需要的朋友可以參考下2017-11-11Android開發(fā)中setContentView和inflate的區(qū)別分析
這篇文章主要介紹了Android開發(fā)中setContentView和inflate的區(qū)別,較為詳細的分析了setContentView和inflate的功能、用法及二者的區(qū)別,需要的朋友可以參考下2016-07-07