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


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

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

                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. HwBinder驱动篇-Android10.0 HwBinder通信原理(十)
  2. 基于OpenCV和QT,建立Android图像处理程序
  3. 图片显示上下有空白的解决办法
  4. Android进程启动流程(App启动)
  5. Android(安卓)Memory Management, OutOfMemoryError
  6. [Android] Android中将一个图片切割成多个图片
  7. AsyncTask的使用详解
  8. Retrofit2.0+RxJava+MVP+Bmob的使用
  9. Android自适应屏幕大小和layout布局(横屏|竖屏)

随机推荐

  1. Android(安卓)启动分析 --- init.c (syst
  2. Android(安卓)3D模型展示
  3. 【Android之OkHttp介绍】
  4. USB 相关笔记
  5. Unity 打包 Android(安卓)API 26
  6. Android(安卓)利用DownLoadManager下载与
  7. Android设置全局字体大小,实现小中大字体
  8. 安卓入门--Spinner控件与二级联动详解
  9. 【Android(安卓)开发教程】设置Activity
  10. Android(安卓)Database