91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中的進程優先級

發布時間:2020-06-18 10:26:41 來源:網絡 閱讀:279 作者:啊希 欄目:移動開發

一.概述

首先解釋一下什么是進程: 
進程是一個具有獨立功能的程序關于某個數據集合的一次運行活動,是系統進行資源分配和調度的基本單位,進程包含多個線程在運行。

在Android中,默認情況下,同一個應用程序內的所有組件都是運行在同一個進程中的,大部分應用程序也不會去改變它。不過,如果需要指定某個特定組件所屬的進程,則可以利用manifest 文件來達到目的。

manifest文件中的每種組件元素——、 、 和——都支持定義android:process屬性,用于指定組件運行的進程。設置此屬性即可實現每個組件在各自的進程中運行,或者某幾個組件共享一個進程而其它組件運行于獨立的進程。設置此屬性也可以讓不同應用程序的組件運行在同一個進程中——實現多個應用程序共享同一個Linux用戶ID、賦予同樣的權限。

元素也支持android:process屬性,用于指定所有組件的默認進程。

如果內存不足,可又有其它為用戶提供更緊急服務的進程需要更多內存,Android可能會決定關閉一個進程。在此進程中運行著的應用程序組件也會因此被銷毀。當需要再次工作時,會為這些組件重新創建一個進程。

在決定關閉哪個進程的時候,Android系統會權衡它們相對用戶的重要程度。比如,相對于一個擁有可見activity的進程,更有可能去關閉一個activity已經在屏幕上看不見的進程。也就是說,是否終止一個進程,取決于運行在此進程中組件的狀態

二.進程的生命周期

Android系統試圖盡可能長時間地保持應用程序進程,但為了新建或者運行更加重要的進程,總是需要清除過時進程來回收內存。為了決定保留或終止哪個進程,根據進程內運行的組件及這些組件的狀態,系統把每個進程都劃入一個“重要性層次結構”中。重要性最低的進程首先會被清除,然后是下一個最低的,依此類推,這都是恢復系統資源所必需的。 
重要性層次結構共有5級,以下列表按照重要程度列出了各類進程(第一類進程是最重要的,將最后一個被終止):

1.前臺進程 
用戶當前操作所必須的進程。滿足以下任一條件時,進程被視作處于前臺:

  • 其中運行著正與用戶交互的Activity(Activity對象的onResume()]方法已被調用)。

  • 其中運行著被正與用戶交互的activity綁定的服務。

  • 其中運行著“前臺”服務——服務以[startForeground()方式被調用。

  • 其中運行著正在執行生命周期回調方法(onCreate()、onStart()或onDestroy())的服務。

  • 其中運行著正在執行onReceive()方法的BroadcastReceiver。

一般而言,任何時刻前臺進程都是為數不多的,只有迫不得已——當內存不足以維持它們同時運行時——才會被終止。通常,設備這時候已經到了使用虛擬內存的地步,終止一些前臺進程是為了保證用戶界面的及時響應。

2.可見進程 
沒有前臺組件、但仍會影響用戶在屏幕上所見內容的進程。滿足以下任一條件時,進程被認為是可見的:

  • 其中運行著不在前臺的Activity,但用戶仍然可見到此

  • activity(onPause()方法被調用了)。比如以下場合就可能發生這種情況:前臺activity打開了一個對話框,而之前的activity還允許顯示在后面。

  • 其中運行著被可見(或前臺)activity綁定的服務。

可見進程被認為是非常重要的進程,除非無法維持所有前臺進程同時運行了,它們是不會被終止的。

3.服務進程 
此進程運行著由startService()方法啟動的服務,它不會升級為上述兩級別。盡管服務進程不直接和用戶所見內容關聯,但他們通常在執行一些用戶關心的操作(比如在后臺播放音樂或從網絡下載數據)。因此,除非內存不足以維持所有前臺、可見進程同時運行,系統會保持服務進程的運行。

4.. 后臺進程 
包含目前用戶不可見activity(Activity對象的onStop()方法已被調用)的進程。這些進程對用戶體驗沒有直接的影響,系統可能在任意時間終止它們,以回收內存供前臺進程、可見進程及服務進程使用。通常會有很多后臺進程在運行,所以它們被保存在一個LRU(最近最少使用)列表中,以確保最近被用戶使用的activity最后一個被終止。如果一個activity正確實現了生命周期方法,并保存了當前的狀態,則終止此類進程不會對用戶體驗產生可見的影響。因為在用戶返回時,activity會恢復所有可見的狀態。關于保存和恢復狀態的詳細信息,請參閱Activity文檔。

5..空進程 
不含任何活動應用程序組件的進程。保留這種進程的唯一目的就是用作緩存,以改善下次在此進程中運行組件的啟動時間。為了在進程緩存和內核緩存間平衡系統整體資源,系統經常會終止這種進程。

依據進程中目前活躍組件的重要程度,Android會給進程評估一個盡可能高的級別。例如:如果一個進程中運行著一個服務和一個用戶可見的activity,則此進程會被評定為可見進程,而不是服務進程。

此外,一個進程的級別可能會由于其它進程的依賴而被提高——為其它進程提供服務的進程級別永遠不會低于使用此服務的進程。比如:如果A進程中的content provider為進程B中的客戶端提供服務,或進程A中的服務被進程B中的組件所調用,則A進程至少被視為與進程B同樣重要。

因為運行服務的進程級別是高于后臺activity進程的,所以,如果activity需要啟動一個長時間運行的操作,則為其啟動一個服務會比簡單地創建一個工作線程更好些——尤其是該操作時間比activity的生存期還要長的情況下。比如,一個activity要把圖片上傳至Web網站,就應該創建一個服務來執行之,即使用戶離開了此activity,上傳還是會在后臺繼續運行。不論activity發生什么情況,使用服務可以保證操作至少擁有“服務進程”的優先級。同理,廣播接收器broadcast receiver也是使用服務來處理耗時任務的,而不是簡單地把它放入線程中。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台南县| 偏关县| 镇沅| 锡林郭勒盟| 竹山县| 宾阳县| 安化县| 太谷县| 游戏| 翁源县| 务川| 璧山县| 隆化县| 滨州市| 库伦旗| 攀枝花市| 延吉市| 宣武区| 诸暨市| 廉江市| 民乐县| 左权县| 忻州市| 哈尔滨市| 化州市| 浦县| 嘉祥县| 泰和县| 广饶县| 南安市| 谷城县| 六安市| 沅陵县| 莲花县| 阿瓦提县| 丁青县| 富源县| 虞城县| 定南县| 台中市| 明溪县|