您的位置:首页 > 移动开发 > Android开发

Android 进程状态的概念

2015-12-31 16:24 295 查看
 


Android 进程状态的概念

标签: android活动
2012-07-20 13:45 2417人阅读 评论(0) 收藏 举报


 分类:

Android(36) 


 


活动进程

    活动(前台)的进程是指那些有组件正和用户进行交互的应用程序进程。他们都是android尝试通过回收资源来使其保持响应的进程。这些进程的数量非常少,只用到最后的关头才会终止这些进程。

活动进程包括:

处于“活动”状态的activity活动,也就是说,它们位于前台并对用户事件进行响应。

正在执行onReceive事件处理程序的广播接收器。

正在执行onStart(),onCreate()或者onDestory事件处理程序的服务

正在运行,且已被标记为前台运行的服务。

 

可见进程

可见,但是非活动的进程是指那些驻留可见活动的进程。顾名思义,可见的活动能被用户看到,但是他们并不是在前台运行或者能对用户事件做出反映,比如,当一个活动activity被部分遮挡的时候,(被一个非全屏或者半透明状态)就会出现这类情况。

这类进程的数量很少,只有在资源极度缺乏的环境下,为保证活动进程的继续执行,才会终止这些进程。

 

启动服务进程

已经启动的服务进程。服务支持在没有可见界面的情况下,仍然能继续不间断地进行处理。因为后台服务没有直接和用户进行交互,所以它们的优先级要比可见进程低一些。但是他们仍然被认为是前台进程。除非活动或者可见进程需要资源,否则不会终止它们。

 

后台进程

不可见,并且没有任何正在运行的服务的活动的进程,通常会有大量的后台进程,android将实验“最后一个被看到,第一个被终止”的方式来终止它们,从而为前台进程提供资源。

 

空进程

为提高系统整体性能,android经常在应用程序的生存周期结束之后,仍然把它们保证在内存中。android通过维护这个缓存类减少应用程序被再次启动的启动时间。通常这个进程会更加需要被定期的终止。

不同于其他平台的APP,安卓的APP只能有限得控制自个儿的生命周期。 取而代之的事,安卓的APP组件必须监听生命周期的改变,然后做出必要的回应,以免在一些特殊情况因为资源的紧张被系统杀死。

默认的,每个安卓程序都运行在一个独立的进程中,并且进程都运行在独立的Dalvik虚拟机实例中。在运行时,内存和进程的管理被独立的处理。

TIP:你可以强制你的APP中的不同组件运行在不同的进程中,也可以让不同APP的组件运行在同个进程中,只要在mainfest中,通过设置组件结点android:process属性来指定进程。

安卓粗暴得管理它的资源,为了确保一个流畅和稳定的用户体验,它在关键时候绝不留情得杀杀杀。也就是说,在没任何警告下,你的APP进程可能就被杀死,为了给更高优先级的APP提供空间和资源。

 

理解APP的优先级和进程状态

安卓杀死它所托管的APP进程是根据优先级来选择的。一个APP的优先级与它组件的最高优先级相同。

如果两个APP的优先级相同,那么运行最久的那个会被优先杀死。进程的优先级也被进程间的依赖性所影响;如果一个APP依赖于第二个APP提供的Service或者Content Provider,

那么第2个APP的优先级至少不会低于依赖于它的APP。

Pid是进程ID,Uid是用户ID,只是Android和计算机不一样,计算机每个用户都具有一个Uid,哪个用户start的程序,这个程序的Uid就是那个用户,而Android中每个程序都有一个Uid,默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果用互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性,每个软件之间是不能随意获得数据的。而同一个application 只有一个Uid,所以application下的Activity之间不存在访问权限的问题。

    Android系统中修改了Linux的UID的含义:用来唯一确定某个用户的身份。由于Android是单用户系统,不需要支持多用户登陆。Android的UID的含义:每个APP对应一个UID——用UID对应用程序进行管理。

 Android中查看UID的方式:

               data/system/packages.list

代码:

?
    PID即进程ID。

     查看: ps|grep XXX

    每一个不同的程序都能有一个UId,但是一个应用里面可以有多个PId
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: