Android之进程管理

Android系统运行的应用程序主要是依靠Java语言编写的,虽然Android是基于Linux的,但在运行Java程序时,还是要先构建出一个可以运行Java语言的虚拟机环境,也就是Dalvik虚拟机。在Android中,每一个应用程序都运行在自己独立的进程中,都拥有一个独立的Dalvik虚拟机实例,也就是说,每打开一个应用就是打开一个虚拟机。每一个Dalvik应用都作为一个独立的Linux 进程执行。虚拟机之间相互独立,这样一个应用程序崩溃不会影响另一个应用程序,也不会导致系统的崩溃,确保了安全性。

系统为每个应用都分配一个虚拟机,导致消耗更多的内存。Linux在进程活动停止都就结束该进程,但是Android系统不同,它会把这些进程保留在内存中,知道系统内存不足才结束重要性低的进程。保留在内存中的进程通常不会影响整体系统的运行速度,当用户再次启动这些进程时,启动速度就会快一点。

类似Java的垃圾回收机制,Android系统也用类似的方法。系统根据进程中运行的组件及组件的状态,为每一个进程分配一个优先级。当系统内存不足时,优先级低的首先被结束。各种进程的优先级从低到高排列如下:

一、前台进程(活动进程):有组件正和用户进行交互的应用程序进程。

这些进程的数量非常少,只用到最后的关头才会终止这些进程。前台进程满足下列情况之一:

  1. 进程有一个正在与用户交互的Activity,即Activity处于onResume()的状态;
  2. 进程有一个Service,和与用户正在交互的Activity绑定;
  3. 进程有一个Service,正在前台运行,及调用了startForeground();
  4. 进程有一个Service,正在执行生命周期的回调方法,onCreate()、onStart()、onDestroy();
  5. 进程有一个BroadcastReceiver,正在执行onReceive()方法。

二、可视进程:不在前台,但是用户依然可见的进程。

进程有一个Activity,该Activity不在前台,但是用户可见,处于onPause()状态。这部分进程虽然不在前台,但与我们的使用也密切相关,只有在系统没有足够内存运行所有前台进程时,才会被结束。

三、服务进程:如果一个进程中运行着一个Service,这个service是通过 startService()开启的,并且不属于上面两种较高优先级的情况,这个进程就是一个服务进程。

尽管服务进程没有和用户可以看到的东西绑定,但是它们一般在做的事情是用户关心的,比如后台播放音乐,后台下载数据等。除非当前台进程和可见进程需要资源,否则不会终止它们。

四、后台进程:进程有一个用户不可见的Activity,处于onStop()状态,就可以认为这个进程是后台进程。

我们按Home返回主界面,程序并不是退出,而是驻留在后台,成为后台进程。后台进程不直接影响用户体验,系统会为了前台进程、可见进程、服务进程而任意杀死后台进程。

通常会有很多个后台进程存在,它们会被保存在一个LRU (least recently used:最近使用)列表中,最先销毁时间最远的activity,这样就可以确保用户最近使用的activity最后被销毁。

五、空进程:一个进程不包含任何活跃的组件,生命周期已经结束,就可以认为是空进程。

应用程序在退出后,依然会在内存中驻留一个空进程(缓存),这个进程没有任何东西在里面运行。保存这个进程的唯一理由是使应用下次能快速启动。这部分的进程无疑是最先被终止的。

很长时间以来,Dalvik虚拟机一直被用户指责为拖慢安卓系统运行速度不如IOS的根源。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,拖慢了应用的运行效率。而在Android L中,谷歌直接删除了Dalvik,取而代之的是ART。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值