Android中的进程和pid

 

 

Pid: Process ID 顾名思义,它指的是Process的id。每个进程都有一个独立的id,可以通过pid来区分不同的进程。

 

程序 vs 进程:

程序是静置的,一般会存放在磁盘中。经过用户的执行,程序会被触发,被加载到内存中成为一个个体:进程。

因此,可以说 进程就是一个正在运行的程序。 操作系统会对每一个进程赋予一个id,就是Pid。

 

以Linux上的 /bin/bash为例, /bin/bash是一段可执行程序。当有用户去执行 /bin/bash 时,系统就会创建一个相应的进程。

当然,不同的用户去执行这同样一段程序,会有不同的进程产生。

 

对于Android:

对于Android,这些特性是同样具有的,Android Os本来就是base Linux Kernel.

 只是从Android应用开发的角度来看,Android弱化了进程的概念。

在Android应用层的开发中,everything is component.  (Activity, Service, BroadcastReceiver, ContentProvider)

 

Android将 进程和组件 进行了剥离,这样可以方便开发。对于Android应用开发者,更多的关注是组件,却相对少关注进程。

 

Android OS通过AMS ( ActivityManagerSerivce) 来管理组件。(启动、关闭、维护 组件)

通过Binder为组件内的通信提供支持(进程内,进程间)

通过LMK(Low Memory Killer)在内存紧张时按照规则回收进程。

 

进程 Pid 相关的一些常用API:

 

android.os.Process.myPid( )

得到当前进程的pid

 

android.os.Process.killProcess ( int pid )

杀死相应进程号的进程

 

List<ActivityManager.RunningProcessInfo> getRunningAppProcesses( )

获取当前正在运行的进程

android.app.ActivityManager.RunningAppProcessInfo.pid

相应的RunningAppProcessInfo的pid

List<ActivityManager.RunningServiceInfo> getRunningServices ( int maxNum )

得到当前正在运行的ServiceInfo

android.app.ActivityManager.RunningServiceInfo.pid

相应的RunningServiceInfo的pid

 

By the way, ActivityManager还有一个类似的  getRunningTasks 接口,可以获取当前正在运行的Tasks.

List<ActivityManager.RunningTaskInfo> getRunningTasks

但是 从 API 21 (Android LL.  5.0 ) 开始,这个接口已经被限制使用了,因为google认为它可能会造成用户的隐私泄露。

第三方app再去调用该接口时,只会返回应用自身 或者 Launcher 两个Task信息。

替代方案可以参考:

http://blog.csdn.net/hyhyl1990/article/details/45700447

 

 

参考:

1. 《鸟哥的Linux私房菜》

2. 老罗 《Android组件设计思想》

3. http://developer.android.com/

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值