android中的多进程模式

原创
2019/07/10 13:07
阅读数 580

进程间内存相互隔离的。 在实际的开发过程中,可能需要把某些组件放在单独进程中去运行。

工作中你使用过多进程模式么?最常见的多进程模式是开启推送服务进程。

  1. 开启多进程模式

Android中的多进程模式,通过在配置清单中给四大组件设置android:process属性值,这样我们就可以轻易开启多进程模式。

这种方式开启的多进程指的是一个应用中存在多个进程的情况,进程间可共享私有数据(如data目录、组件信息等),但不能共享内存。

不同应用之间的多进程模式,进程之间不能共享私有数据,也不能共享内存。

另一种非常规的多进程方法,通过JNI在native层去fork一个新的进程,但是这种方法属于特殊情况,也不是常用的创建多进程的方式,因此我们不考虑这种方式(其实我不会)。

我们无法给一个线程或实体类指定其运行时所在的进程。

下面我们来看一下示例: 

        <activity
            android:name=".main.TestActivity"
            android:process=":test_activity"/>

        <activity
            android:name=".TestService"
            android:process=":test_service"/>

        <activity
            android:name=".TestContentProvider"
            android:process=":test_content_provider"/>

        <activity
            android:name=".TestBroadReceiver"
            android:process=":test_broad_receiver"/>

当启动TestActivity时,系统会为它创建一个单独的进程,进程名为"包名:test_activity"。默认进程名是包名。

查看进程shell命令

adb shell ps | gres 包名   ##可查看到一个包名的所有进程

adb shell ps ##查看系统中的所有进程

应用的私有进程,以":"开始命名的进程属于应用的私有进程。其他应用组件不可以和它跑在同一个进程中。

全局进程,不以":"开始命名的进程属于全局进程,其他应用的组件通过ShareUID方式可以和它跑在同一个进程中。

无论私有进程还是全局进程,系统都会为其创建一个虚拟机来运行进程。Android为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配了一个独立的虚拟机,不同的虚拟机在分配上有不同的内存空间。

多进程的优势:

1 不被轻易kill掉,如推送服务在自己的进程中运行,按返回键退出程序,推送服务还后台的自己进程中运行。

2 系统分配给一个进程的内存大小是固定的,如果你的程序特别消耗内存,那么就开启多进程模式来增加内存。

3 把程序中的某些组件放在单独进程中运行。

一般来说,使用多进程会造成如下方面问题:

1 静态成员和单利模式完全失效。

2 线程同步机制完全失效。

3 SharedPreferences的可靠性下降。//SharedPreferences不支持多个进程同时读/写操作

4 Application会多次创建。

 

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部