每个Android 应用进程都会分配一定的运行内存,当超出运行内存时就会报OOM。平常代码开发时要注意内存泄漏的问题,内存泄漏的问题本质就是生命周期较长的对象持有生命周期较短的对象的引用,导致生命周期较短的实例无法释放回收。
所谓的进程保活实际上就是降低oom_adj的值 ,oom_adj值对应进程分类
oom_adj | 分类 |
< 0 | Native 进程 |
0 | 前台进程 |
2 | 可见进程 |
5 | 前台服务 |
查看引用进程oom_adj的值shell 命令:
1)ps |grep "包名" 得到进程号
2) cat /proc/{pid}/oom_adj 查看进程对应下的oom_adj的值
查看应用分配的内存大小:
方式一:代码查看
Runtime rt=Runtime.getRuntime();
long maxMemory=rt.maxMemory();
方式二:adb命令查看
adb shell cat /system/proc
找到dalvik.vm.heapgrowthlimit
AndroidManifest.xml 清单application节点下添加:
android:largeHeap="true" 可扩充运行内存,具体大小为 /system/proc 文件内 dalvik.vm.heapsize 的值
目前进程保活的几种方式:
1.监听屏幕熄灭状态,打开一像素的Activity
2.后台播放无声音乐
3.双进程的互相唤醒
4.采用JobService 轮询开启服务
保活技术只是仅仅降低应用的oom_adj值,使系统回收的概率变小。但是不能保证一定不会被回收,应用在特定的情况下还是会被杀死
附上demo下载地址:
https://download.csdn.net/download/swedne/12754420
如有另类的保活技术还是代码问题欢迎评论指出,不胜赐教探讨