標籤:des android style http ar color 使用 sp for
Android中,同一個應用的所有組件在預設情況下都運行在同一個進程中,但也可以通過修改manifest檔案中的android:process屬性來指定該組件要運行中那個進程,也可以讓不同應用的組件們運行在同一個進程中,當然這些應用要共用一個使用者ID並並且有相同的數位憑證。
Android可能在某個時刻決定關閉一個進程,當決定要關閉那些進程的時候,系統會衡量每個進程與使用者的緊密程度,這時候就跟Android中進程的層級有關了。像一個具有可見的activity的進程要比那些activity都是不可見的進程擁有更高的等級,更不容易被系統殺死。那麼Android的進程等級有那些呢?首先,我們可以看一張圖:
上面的圖片就是Android系統中不同類型的進程和他們的優先順序了。下面是每個進程的介紹。
1、前台進程
使用者當前正在做的事情需要這個進程。如果滿足下面的條件之一,一個進程就被認為是前台進程:
這個進程擁有一個正在與使用者互動的Activity(這個Activity的onResume()方法被調用)。
這個進程擁有一個綁定到正在與使用者互動的activity上的Service。
這個進程擁有一個前台啟動並執行Service(service調用了方法startForeground()).
這個進程擁有一個正在執行其任何一個生命週期回調方法(onCreate(),onStart(),或onDestroy())的Service。
這個進程擁有正在執行其onReceive()方法的BroadcastReceiver。
通常,在任何時間點,只有很少的前台進程存在。它們只有在達到無法調合的矛盾時才會被殺--如記憶體太小而不能繼續運行時。通常,到了這時,裝置就達到了一個記憶體分頁調度狀態,所以需要殺一些前台進程來保證使用者介面的反應
2、可見進程
一個進程不擁有運行於前台的組件,但是依然能影響使用者所見。滿足下列條件時,進程即為可見:
這個進程擁有一個不在前台但仍可見的Activity(它的onPause()方法被調用)。當一個前台activity啟動一個對話方塊時,就出了這種情況。
3、服務進程
一個可見進程被認為是極其重要的。並且,除非只有殺掉它才可以保證所有前台進程的運行,否則是不能動它的。
這個進程擁有一個綁定到可見activity的Service。
一個進程不在上述兩種之內,但它運行著一個被startService()所啟動的service。
儘管一個服務進程不直接影響使用者所見,但是它們通常做一些使用者關心的事情(比如播放音樂或下載資料),所以系統不到前台進程和可見進程活不下去時不會殺它。
4、後台進程
一個進程擁有一個當前不可見的activity(activity的onStop()方法被調用)。
這樣的進程們不會直接影響到使用者體驗,所以系統可以在任意時刻殺了它們從而為前台、可見、以及服務進程們提供儲存空間。通常有很多後台進程在運行。它們被儲存在一個LRU(最近最少使用)列表中來確保擁有最近剛被看到的activity的進程最後被殺。如果一個activity正確的實現了它的生命週期方法,並儲存了它的目前狀態,那麼殺死它的進程將不會對使用者的可視化體驗造成影響。因為當使用者返回到這個activity時,這個activity會恢複它所有的可見狀態。
5、空進程
一個進程不擁有入何active組件。
保留這類進程的唯一理由是快取,這樣可以提高下一次一個組件要運行它時的啟動速度。系統經常為了平衡在進程快取和底層的核心快取之間的整體系統資源而殺死它們。
android中的進程層級