Android多进程

Android应用程序默认在同一进程中运行,但通过设置activity的process属性可实现多进程。多进程能提高RAM利用率,保护关键服务不受主进程影响。然而,静态变量和SharedPreferences在不同进程间无法共享,需要使用Intent、Handler/Messenger或AIDL进行跨进程通信。是否采用多进程取决于应用的内存管理和需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,你可能需要考虑使用一个或多个独立的进程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值