国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中進程生命周期的優先級

2020-04-11 10:57:26
字體:
來源:轉載
供稿:網友

學習Android最好的途徑當然是強大的官方文檔了,其中在Processes and Threads一節中對于進程生命周期淘汰優先級,有著詳細的介紹。就不給大家轉帖了,直接放譯文吧,如下:

Android系統會盡量維持進程的存在,但畢竟資源有限,當系統資源告急的時候會淘汰一部分進程。淘汰順序的憑據就是系統進程的優先級了,優先級越高越不容易被殺死,反之亦然。系統總共為進程分了五個優先級,如下

一、前臺進程(進程滿足如下任一條件即為前臺進程):

1. 擁有 一個執行了onresume方法正在與用戶交互(獲得焦點)的Activity
2. 擁有一個service,這個Service跟正在與用戶交互的Activity進行了綁定
3. 擁有一個Service,這個Service調用了startForeground()方法
4. 擁有一個正在執行onCreate()、onStart()或者onDestroy()方法中的任意一個的Service
5. 擁有一個正在執行onReceive方法的BroadcastReceiver

二、可見進程:

1. 擁有一個執行了onPause方法,但仍然可見的Activity
2. 擁有一個Service,這個Service跟一個可見的或前臺的Activity綁定了

三、服務進程:

擁有一個通過startService方法啟動的Service的進程

四、后臺進程:

擁有一個后臺Activity(onStop方法被調用)的進程

五、空進程:

沒有擁有任何活動的應用組件的進程,也就是沒有任何Service和Activity在運行

另外,還有一些需要補充的,當一個進程滿足多個進程條件時,當然是取優先級更高的為準,比如一個進程同時滿足前臺進程和服務進程的條件,這個進程就是個前臺進程,這點很好理解。另外,進程的優先級也不是一成不變的,而且有時候會隨著一些相關的因素而發生改變;比如,某進程A滿足前臺進程的第二個條件,進程A擁有一個service,這個Service跟正在與用戶交互的Activity進行了綁定;當這個Activity變成可見狀態了,進程A便不再滿足前臺進程的條件,進而因滿足可見進程的第二個條件,進程A變成了可見進程。總之,在掌握了基本概念之后,需要細心的分析具體的情況,方能得出正確的判斷。

進程優先級的額外說明

1. 系統會賦予進程盡可能高的優先級. 例如一個進程既包含已啟動的service, 也包含前臺activity, 則這個進程會被視為前臺進程.

2. 由于組件之間的依賴性, 進程的優先級有可能被提高. 假如進程A服務于進程B, 則進程A的優先級不能低于進程B. 比如, 進程A的ContentProvider組件正在服務于進程B的某個組件, 或者進程A的service組件和進程B的某個組件綁定等, 這些情況下, 進程A的優先級都不會低于進程B(如果按照優先級規則, 進程A的優先級確實低于進程B, 則系統會選擇提高進程A的優先級到和進程B相同).

3. 由于服務進程的優先級高于后臺進程, 因此如果activity需要執行耗時操作, 最好還是啟動一個service來完成. 當然, 在activity中啟動子線程完成耗時操作也可以, 但是這樣做的缺點在于, 一旦activity不再可見, activity所在的進程成為后臺進程, 而內存不足時后臺進程隨時都有可能被系統殺死(但是啟動service完成耗時操作會帶來數據交互的問題, 比如耗時操作需要實時更新UI控件的狀態的話, service就不是一個好的選擇). 基于同樣的考慮, 在BroadcastReceiver中也不應該執行耗時操作, 而應該啟動service來完成(當然, BroadcastReceiver的生命周期過于短暫, 也決定了不能在其中執行耗時操作).

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德昌县| 新民市| 陈巴尔虎旗| 绥芬河市| 常州市| 余姚市| 洛扎县| 澎湖县| 怀柔区| 邛崃市| 四川省| 垣曲县| 双辽市| 林甸县| 马山县| 金阳县| 和田县| 大同县| 兴和县| 潍坊市| 漳浦县| 信丰县| 兴化市| 甘孜| 武隆县| 长泰县| 祁连县| 凭祥市| 扬中市| 克什克腾旗| 万荣县| 宁城县| 醴陵市| 策勒县| 丰台区| 延庆县| 商河县| 斗六市| 益阳市| 芮城县| 武穴市|