溫故而知新,系統整理一下。
1. 基本知識:
如果某個應用程序組件是第一次被啟動,且這時應用程序也沒有其他組件在運行,則Android系統會為應用程序創建一個包含單個線程的linux進程。默認情況下,同一個應用程序的所有組件都運行在同一個進程和線程里(叫做“main”主線程)。如果組件啟動時,已經存在應用程序的進程了(因為應用程序的其它組件已經在運行了),則此組件會在已有的進程和線程中啟動運行。不過,可以指定組件運行在其他進程里,也可以為任何進程創建額外的線程。
2. 進程的分類(根據進程的重要性, 從高到低)和生命周期
1). 前臺進程
用戶當前操作所必須的進程。滿足以下任一條件時,進程被視作處于前臺:
o其中運行著正與用戶交互的Activity(Activity對象的 onResume() 方法已被調用)。
o其中運行著被正與用戶交互的activity綁定的服務Service。
o 其中運行著“前臺”服務Service——服務以startForeground()方式被調用。
o其中運行著正在執行生命周期回調方法(onCreate()、onStart()或onDestroy())的服務Service。
o其中運行著正在執行onReceive()方法的BroadcastReceiver。
絕大情況下不會終止此類進程, 當內存不足以維持它們同時運行時——才會被終止
2). 可見進程
沒有前臺組件、但仍會影響用戶在屏幕上所見內容的進程
o 其中運行著不在前臺的Activity,但用戶仍然可見到此activity(onPause()方法被調用了)
o 其中運行著被可見(或前臺)activity綁定的服務Service。
可見進程被認為是非常重要的進程,除非無法維持所有前臺進程同時運行了,它們是不會被終止的。
3). 服務進程
此進程運行著由startService()方法啟動的服務
除非內存不足以維持所有前臺、可見進程同時運行,系統會保持服務進程的運行。
4). 后臺進程
包含目前用戶不可見activity(Activity對象的onStop()方法已被調用)的進程
這些進程對用戶體驗沒有直接的影響,系統可能在任意時間終止它們,以回收內存供前臺進程、可見進程及服務進程使用
5). 空進程
不含任何活動應用程序組件的進程
保留這種進程的唯一目的就是用作緩存,以改善下次在此進程中運行組件的啟動時間。
為了在進程緩存和內核緩存間平衡系統整體資源,系統經常會終止這種進程
3. 關于線程
1). 應用程序啟動時,系統會為它創建一個名為“main”的主線程, 也稱為"UI Thread"
2). UI Thread特點重要, 組件的回調方法, 事件的分發和回調, UI的更新都是在線程執行的
3). 一些長時間的工作(如聯網)不能在UI Thread中執行, 只能在分線程(worker Thread)中執行
------相關資料推薦
Android進程與線程基本知識