Android多进程:
每一个进程都是独立的,同一个应用程序的Activity,默认情况是在同一个进程中运行的。
但是如果给activity申明了process属性,该activity就是运行在一个新的进程中。
如下面这个activity:
<activityandroid:name="com.shenbin.app.MyProcessActivityB"android:process=":shenbin"></activity>
这个的进程名为省略了包名的:全名为:com.shenbin.app:shenbin
或者
<activityandroid:name="com.shenbin.app.MyProcessActivityB"android:process="com.shenbin.app.shenbin" ></activity>
这个进程名为:com.shenbin.app.shenbin
那么运行在两个进程中的activity和在同一个进程中的有什么不一样呢?
使用多进程有啥好处
一个独立的进程可以充分利用自己的RAM预算,使其主进程拥有更多的空间处理资源。
此外,操作系统对待运行在不同组件中的进程是不一样的。这意味着,当系统运行在低可用内存的条件时,并不是所有的进程都会被杀死。想象一下:你的音乐播放器正在后台运行,音乐突然播放,系统需要释放一些内存(因为facebook,这就是原因)。由于播放音乐的服务跑在另一个进程中,一种极为可能的 情况就是操作系统将会先杀死你的主进程(那个运行着你的UI的),而留下那个在另一个进程播放音乐的。
使用多进程的坑(需要注意的)
1,静态变量数据不能共享。
一个程序中,有一个类DataClass,这个类有个个静态变量PROCESS_NUM = 1;在MainActivity给他重新赋值为2,然后跳转到MyProcessActivityB的activity里面,进行访问,然后输出的结果为1。大家可以尝试写一下。
2,SharedPreferences有影响,如果在两个进程中的activity同时进行读写,这样就会有一些问题,所以尽量避免。
这是否意味着两个独立的进程之间互相交流是不可能的吗?不,实际上是可能的,有几种方法可以做到。最值得注意的是,Intent可以跨进程“旅 行”,Handlers和Messengers也可以。。你也可以依靠AIDL(Android接口定义语言)和Binder,和你通常声明一个
bound service
是否需要使用多进程
如果你的用户正在经历越来越频繁OutOfMemory错误或者他们抱怨你的应用程序是极其消耗RAM,你可能需要考虑使用一个或多个独立的进程。