Android-進程理解/進程的優先級別


進程理解

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);

 


 

 假設 當系統內存不足的時候,都是后台進程,系統會怎么殺

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM