码迷,mamicode.com
首页 > 系统相关 > 详细

到底是 Activity 被回收了还是进程被杀死了?

时间:2016-08-12 23:59:50      阅读:576      评论:0      收藏:0      [点我收藏+]

标签:

不管是安卓的官方文档还是源码注释,处处可见“从 Activity A 跳到 Activity B,当系统内存不足时 A 可能会被回收……”,而且没有明确说明 A 和 B 是否属于同一个 app 或进程。

但是,在官方给的 Activity 生命周期图中,却说内存不足时低优先级的进程将被杀死。


技术分享

那么,内存不足时,到底是 Activity 被回收了呢,还是进程被杀死了呢,还是二者都出现了呢?

答案是,Activity 被回收了,而且进程被杀死了,而且该进程是后台进程。

默认情况下,一个 app 内的所有 Activity 都属于同一个进程,不同的 app 的 Activity 属于不同的进程。

但是,即使 Activity A 和 B属于同一个 app,它们也是可以属于不同的进程的。实现方法是在 AndroidManifest 文件中通过 android:process 属性来指定不同进程。

但是,通过在 Manifest 文件中设置 android:process 属性,我们可以做到同一个 app 的 Activity 运行于不同的进程。

<activity android:name="com.tigerpenguin.lab.activitymemory.ActivityA"
          android:label="Multi Process"
          android:process=":ProcessA">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name="com.tigerpenguin.lab.activitymemory.ActivityB"
          android:label="Activity B"
          android:process=":ProcessB"/>

当内存不足时,系统会杀死优先级低的后台进程,进程内的 Activity 肯定也就被回收了。

手机屏幕上正在显示的 Activity 所在的进程是前台进程,其余的是后台进程。

“从 Activity A 跳到 Activity B……”,这时 B 显示在屏幕上,如果 A 和 B 属于同一个进程,所以 A 和 B 所在的进程属于前台进程,所以 A 不会被杀死;如果 A 和 B 属于不同进程(二者可能属于同一个 app,也可能属于与不同的 app),这时 A 才有可能被杀死。

参考文献:

到底是 Activity 被回收了还是进程被杀死了?

标签:

原文地址:http://blog.csdn.net/zhaizu/article/details/52194632

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!