Android中的进程和pid
2015-07-08 18:10
537 查看
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信息。
替代方案可以参考:
/article/9434460.html
参考:
1. 《鸟哥的Linux私房菜》
2. 老罗 《Android组件设计思想》
3. http://developer.android.com/
程序 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信息。
替代方案可以参考:
/article/9434460.html
参考:
1. 《鸟哥的Linux私房菜》
2. 老罗 《Android组件设计思想》
3. http://developer.android.com/
相关文章推荐
- 【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递
- Android的string.xml中使用html与变量
- Android 百度地图开发之地图定位
- Android使用TextureView播放视频
- Android使用TextureView播放视频
- Android自定义属性
- android 4.4 添加物理按键
- android adb介绍
- Android 屏幕适配相关解决方案
- android studio 非法字符: '\ufeff' 解决方案
- android studio 中配置androidAnnotation 的新版正确配置
- Android 实现跑马灯显示数条标题
- Android调试下adb的device not found以及device offline问题的解决办法
- Android常用工具类
- android edittext不弹出软键盘
- Android之TelephonyManager类的方法详解
- Android动态封装圆角,按下效果的背景
- Android 刮刮卡自定义view
- android 非要和EditText的光标过不去??
- 【资源汇总】Android应用解决方案全攻略