安卓系统基于Linux
当应用启动时默认是运行在一个只有主线程的新进程中,如果需要应用内的不同组件运行在不同进程可以通过配置文件来实现
配置文件(AndroidManiFest.xml)中的
application/
activity/service/receiver/provider等都有一个progress属性用于设置运行的进程名,默认是同一进程,设置不同名字则运行在不同进程中
发生过应用后台时被系统结束了?这是肯定的,不然你手机只会越运行越卡。
安卓系统回收进程是根据进程优先级来的,优先级越高越安全,以下优先级从高到低
安卓系统应用
等级最高的System进程,通常是手机关机才结束(有点废话)
系统自带应用(system/app目录下的app),如果应用配置文件中application元素persistent设置为true
如:phone等打电话的进程,是手机必须有的功能,这些应用优先级仅次于System进程
安卓第三方应用的进程优先级(也就是我们平常开发的应用)
foreground 前台进程(除非anr(application not responding),否则不会结束)
1.1、activity处于resume 或生命周期正在被执行时
1.2、activity处于与bound服务(服务绑定方式的一种)交互状态
1.3、前台服务(调用service.StartForeGround())
1.4、service生命周期正在被执行时
1.5、broadcastReceiver正在执行onReceivervisible 可视进程(除非系统到了不杀死该进程便无法维持前台进程运行时才会结束可视进程)
2.1、对话框弹出,activty被覆盖但可见
2.2、service 绑定到可见或前台activityservice 服务进程(除非可视进程跟前台进程运行资源不足,不然不会结束进程)
3.1、startService启动的服务backgroud 后台进程(随时会被结束进程以释放资源,系统会保证最后一个使用的后台进程最后才被杀死)
4.1、不可见的activity进程,onStop()被调用(过了一段时间),这个就是我们通常应用进后台被结束的原因empty 空进程(没有运行任何component的进程,保留这个进程主要是为了缓存的需要)
5.1不包含任何活动应用程序组件。唯一作用就是改善下次运行程序时的启动时间(难道是应用退出后没完全回收?)
进程的优先级会受其依附的优先级更高的进程影响,如boundService