进程理解
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);