Android 由android:process引发LMK问题

在Android开发的过程中遇到一个奇怪的问题:在内存不足的情况下,发生LMK后,再次进入Camera,新创建的相机预览取景框为上一次编辑图片画面。


Android 4.1中, Gallery2 与Camera被放置到同一个包com.android.gallery3d里

在Gallery2中的一个activity中,有下面定义,这样会创建一个子进程

<activity android:name="com.android.gallery3d.photoeditor.PhotoEditor"
                android:label="@string/app_name"
                android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:hardwareAccelerated="true"
                android:process=":edit">

用PS命令可以看到com.android.gallery3d:edit的进程

由于图片编辑界面比较占内存,程序初始设计者估计也是基于这个考虑才创建子进程来实现吧!

但是,多开一个进程,会引发LMK,把com.android.gallery3d进程杀掉,使得从图片编辑界面返回上一界面,即com.android.gallery3d进程时;

这个问题log中没有其他的异常信息,除了

09-02 15:22:16.498 <4>0[17304.912537] [LMK] select 12350 (droid.gallery3d), adj 7, size 12936, to kill
09-02 15:22:16.498 <4>0[17304.912553] [LMK] send sigkill to 12350 (droid.gallery3d), adj 7, size 12936

修改方法:

   去掉android:process=":edit" ,让PhotoEditor跟Camera、Gallery3d 在同一个进程里就没有这个问题了(即时发生LMK,也不会杀死进程本身)。


Android是支持多进程的,每个进程的内存使用限制一般为24MB的内存,所以当完成一些很耗费内存的操作如处理高分辨率图片时,需要单独开一个进程来执行该操作(上面的配置可以用来实现该操作)。即便如此,开发者还是不要随意多开进程来耗费用户的资源。(内存限制,有16MB24MB 32MB,很老的机型的内存限制会是16MB,这个具体还要再搜索下资料。。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值