Android IPC -- 初期(实现多进程模式)

首次去了解所谓的IPC机制,那么IPC什么意思?
IPC为Inter-Process-Communication的缩写即进程间通信。
那么问题又来了,何为进程呢?
进程一般在pc/移动端指一个程序或一个应用,也就是你下载安装的某一个软件,我是这样理解的
在Android程序中也是可以使用多进程的,通过指定android:process属性来实现即可。
例:
<activity android:name="com.application.c.MainActivity" android:configChanges="orientation|screenSize" android:label="@string/app_name" android:launchMode="standard">
 <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="com.people.SecondActivity" android:configChanges="orientation|screenSize" android:label="@string/app_name" android:process=":remote"/>
<activity android:name="com.people.ThirdActivity" android:configChanges="orientation|screenSize" android:label="@string/app_name" android:process="com.application.c.remote"/>
上面这段代码分别为SecondActivity和ThirdActivity指定了process属性,而且指定的值不同,所以此应用在启动时,系统会在之前默认进程的基础上又创建了2个单独的进程,如果想查看的话可以使用shell来查看,命令为:adb shell ps得到如下图所示的结果
--------------------------------------------------------------------------------------------------------------------

u0_a1176  9611  394   1669456 147560 ffffffff 00000000 S com.application.c
root      9640  2     0      0     ffffffff 00000000 S kbase_event
u0_a1176  9685  394   1609836 60932 ffffffff 00000000 S com.application.c.remote
root      9709  2     0      0     ffffffff 00000000 S kworker/6:1
root      9722  2     0      0     ffffffff 00000000 S kbase_event
u0_a1176  9923  394   1625196 69228 ffffffff 00000000 S com.application.c:remote
-------------------------------------------------------------------------------------------------------------------

到了这里,大家觉得,哇偶,一个程序中使用多进程这么粗暴简单,以后就可以随便使用了,其实不然,如果这样的话,那会死的很惨哦~
例2:
主要是演示下同一程序不同进程间的Activity访问同一个静态变量,最终结果会是什么呢/
清单文件中的配置与例1相同,只是activity名称不同
首先在程序中新建工具类,定义静态变量默认值为setUserid = 1;
thirdActivity中重新赋值为30,SecondActivity中重新赋值为3,这时在入口Activity的onResume()方法中重新调用,看日志输出结果为以下图所示:






tag为定义的进程名称,在调用了其它2个Activity后,重新返回到MainActivity,发现onResume()方法中输出的值居然没有发生改变,也就是在不同进程中共享资源失败了,是不是好险呀~如果不接着往下看,是不是就被坑了^_^
这里再补充一点,同一程序中如果组件定义的进程不同,那么Application也会被创建多次哦
使用多进程模式的问题总结:

1:静态变量和单例模式完全失效
2:线程同步机制完全失效
3:SharedPreferences的可靠性下降
4:Application会多次创建

多进程模式中,不同进程的组件会拥有独立的虚拟机、Application以及内存空间
那在多进程中如何实现数据共享呢??这就要看下一篇喽,有不严谨的地方请多多指教哦~~





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值