Android多进程模式
来源:互联网 发布:数据标准是什么 编辑:程序博客网 时间:2024/05/29 14:30
转自:http://www.jianshu.com/p/54d2983bea2c
本文内容基于《Android开发艺术探索》,强烈推荐,值得一看。
在Android中说多进程一般是指一个应用中存在多个进程,在Android中使用多进程只有一种方法:给四大组件在AndroidMenifest中指定android:process属性,除此之外别无他法(通过JNI在native层去fork一个进程也可以,不常用,不做介绍),所以我们不能给一个线程或者实体类指定其运行时所在的进程。
1.开启多进程
<activity android:name="com.zhong.ActivityA" /><activity android:name="com.zhong.ActivityB" android:process=":remote" /><activity android:name="com.zhong.ActivityC" android:process="com.zhong.remote" />
1). 上面三个Activity中:
- ActivityA:未指明android:process属性,它允许在默认进程中,进程名为包名,即com.zhong;
- ActivityB:设置android:process=":remote",系统会为它创建一个单独的进程,进程名为包名+:remote,即com.zhong:remote,相当于android:process="com.zhong:remote";
- ActivityC:设置android:process="com.zhong.remote",系统会为它创建一个单独的进程,进程名为process设置的值,即com.zhong.remote
2). ":remote"和"com.zhong.remote"区别
":remote"中":"是指要在当前进程名前面附近包名的简写,"com.zhong.remote"是一种完整的写法,进程名不会再附加包名;其次,":"是属于当前应用的私有进程,"com.zhong.remote"是全局进程,全局进程其他应用可以通过ShareUID方式跑在同一进程中(前提是两个应用ShareUID相同并且签名相同),这两个应用可以相互访问对方私有数据。
2.运行机制
由于Android为每个进程分配独立的虚拟机,所以不同虚拟机访问同一个类会产生不同的副本,因此运行在不同进程中的组件无法通过内存共享数据,所以一个应用使用多进程会出现一下几个问题:
- 静态成员和单例模式完全失效(不是同一块内存,会产生不同的副本)
- 线程同步机制完全失效(不是同一块内存,所以对象也不是同一个,因此类锁、对象锁也不是同一个,不能保证线程同步)
- SharedPreferences 可靠性下降(SharedPreferences不支持多个进程同时写,会有一定的几率丢失数据)
- Application 多次创建(Android为每个进程分配独立的虚拟机,这个过程其实就是启动一个应用,所以Application会被创建多次)
小结: Android中使用多进程一般是来分担主进程的内存压力,应用越做越大,需要的内存也越来越多,讲一些独立的组件放在不同的进程中,这样可以减轻主进程的内存负担;还有就是启动一个Service,做一些守护或者耗时的操作。
本来想写一下Binder机制的,但现在自己还没完全搞懂,以后补上下面几篇文章会写一下IPC方式:Messenger、AIDL、ContentProvider以及Binder连接池的使用,至于文件、Socket我感觉不适很常用就不再做说明了
本人技术有限,欢迎指正,谢谢!
- Android多进程模式
- Android多进程模式
- Android多进程模式
- Android中的多进程模式
- android中的多进程模式
- android 中的多进程模式
- Android中的多进程模式
- Android中的多进程模式
- Android IPC机制多进程模式
- 6.Android中的多进程模式
- android中的多进程模式(IPC)
- Android IPC机制之开启多进程模式
- IPC机制---02 Android中的多进程模式
- PID,UID,sharedUserId以及Android开启多进程模式
- Android开发艺术探索笔记(4)- 多进程模式
- Android IPC -- 初期(实现多进程模式)
- Android IPC简介之(多进程模式)初识
- java多进程模式
- JMX解读
- atoi()函数的实现
- C语言题(3)
- 【数据压缩】MPEG音频编码实验
- spring+springmvc+myabtis+bootstrap 填补天坑(1)-静态资源加载问题
- Android多进程模式
- 【bzoj2687】交与并
- RED推出全球首款全息智能手机Hydrogen One
- 去大公司还是小公司工作
- 新电脑+旧系统:教你在不同机器间转移Linux
- 欢迎使用CSDN-markdown编辑器
- Androdi:广播BroadCast
- IPython/Jupyter SQL Magic Functions for PySpark
- 李航统计学习方法-K邻近法