Android 进程摘要 - litonghui/TechBlog GitHub Wiki
Android 几种进程:
前台进程:Activity 或者绑定的Service。
可见进程:处于onPause()状态下的Activity 或者绑定的Service。
服务进程:startService 方法启动的Service用户不可见,处于非播放页面的音乐播放器,非下载页面的视频下载。
后台进程:处于onStop()状态下的Service,后台挂起的QQ或者微信等IM软件。
空进程:不包含任何应用程序的程序进程,直接干掉。
避免进程被杀死:
提高进程等级:可见进程Service 通过startForegound 让Service 进程成为前台进程;在Mainfest 文件中,intent-filter 节点添加android:priotity 属性1000,最高优先级;
自动重启服务:onStartCommond 返回START_STICKY 或 TART_REDELIVER_INTENT 服务被杀死,自动重启;在ondestory 中startService()
技术扩展:jni fork 进程 ;前台保留1px 页面。
进程间通信方式:
Android 程序之间不能共享内存,不同程序之间通信方式依靠四大组件通信。
1. Activity
2. Service
3. Broadcast
4. Content Provider
跨进程访问应用程序之间的数据,返回对象是cursor,可以修改对应程序数据。
自定义Provider: Mainfest 文件中声明:
<provider
android:authorities="main.contentprovider"
android:name=".provider.MainProvider"
android:readPermission="main.READ"
/>
ContentProvider中的URI : content://main.contentprovider/table/1024
结构:content:// + authorities + path +id
进程间通信机制:Binder
Client、Server、Service Manager 运行在用户控件的程序;Binder 驱动运行在内核空间。
Binder 驱动程序提供设备文件/dev/binder与用户空间交互;client、server 和 service manager 通过open 和 ioctl 文件操作函数和binder 驱动程序进行通信
Client 和 server 之间进程间通信通过Binder 驱动程序间接实现。