進程理解
Android系統最小的控制單元是:進程 process
應用/CPU最小的控制單元是:線程 thread
一個應用一個 process 進程
一個應用一個 package(包是唯一的)
一個應用一個 dalvik vm(一個應用一個dalvik vm,這樣才能保證數據的安全性)
一個應用一個 user(一個應用一個用戶,因為Linux把每一個進程看作一個用戶,進程與進程之間 權限驗證很嚴格)
在Android4.4之前,每一個進程是 dalvik vm 模式,這種方式長時間運行會導致性能低
ART 模式:Android 5.0后,這種模式之后,以后的安卓就是蘋果的性能
進程的優先級別
當Android系統內存空間不足的時候,系統會自動殺進程,怎么殺進程呢,就是按照進程的優先級別來殺的,優先級別 最低的 最先殺
1.前台進程:
1.1 可以看到的/可以操作的/屬於前台進程
1.2 A應用 去綁定 B應用的服務,然后B應用是回到桌面狀態的,B應用也屬性前台進程
1.3 只要是Service在執行生命周期方法的時候,也屬於前台進程
1.4 只要是BroadcastReceiver-->onReceiver()生命周期方法的時候,也屬於前台進程
2.可視進程:
2.1 當A應用 被 B應用擋住來一部分, A應用可以看到,卻不能操作,A應用屬於可視進程
2.2 當A應用 被 B應用擋住來一部分, A應用可以看到,卻不能操作,同時A應用綁定了S應用的Service,那么S應用和A應用都屬於可視進程
3.服務進程:
3.1 當C應用啟動了一個Service,C應用回到桌面,C應用屬於服務進程
4.后台進程:
4.1 當D應用的任務棧還有Activity應用,D應用回到桌面,D應用屬於后台進程(直接按了Home鍵盤)
5.空進程:
5.1 當F應用的任務棧被彈棧彈完了,沒有一個任務棧了,F應用屬於空進程(不停的按Back鍵)
后台進程演示:
空進程演示:
進程的提升
進程的提升:例如:在之前的的博客,Android-bindService本地服務-音樂播放(后台播放)-下,介紹了,如何把服務進程提升為前台進程
為什么要把服務進程提升為前台進程?
答:因為把服務進程提升為前台進程,是最穩定的(例如:一些山寨應用播放器,播放過程中,系統內存不足,應用突然被系統回收了,如果提升為前台進程,就不會被回收了)
Service:
// id=通知到唯一標示 notification=通知 startForeground(1, builder1.getNotification());
Activity:
// 既然是后台播放,就是要把當前Activity切換到后台 moveTaskToBack(true);
假設 當系統內存不足的時候,都是后台進程,系統會怎么殺