如何降低oom_adj的值,以及如何使得我们应用占的内存最少。
1.省电管理中添加白名单
为该应用设置智能省电,而不是:后台运行10分钟关闭或者禁止后台运行等。
服务进程是没有界面的一直在后台工作的进程,优先级不高,当系统内存不足时会被杀死,再次充裕的时候会再次开启.
2.Service后台运行
1.Service要运行在App主进程,不要单独设置进程Id。
2.android:persistent="true" 属性使保活服务可以持久运行;服务的onStartCommand中return START_REDELIVER_INTENT,注意服务不要调用stopself();
< application ...
android:persistent="true" android:theme="@style/AppTheme">
3.服务里使用WakeLock 让服务保持后台运行。
PowerManager.WakeLock wakeLock;//休眠唤醒 让服务保持后台运行。不要滥用,不要到处都用,会导致耗电增加。
@Override
public void onCreate() {
super.onCreate();
if (getPackageManager().checkPermission("android.permission.WAKE_LOCK", getPackageName()) == PackageManager.PERMISSION_GRANTED) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, QhTalkService.class.getName());
wakeLock.acquire();
}
}
@Override
public void onDestroy() {
if (wakeLock !=null) {
wakeLock.release();
}
}
3.处理点击桌面Activity重启问题
android:alwaysRetainTaskState="true" 解决:最小化后点击桌面程序图标,重启进入MainActivity,而当前活动界面丢失的问题
< android:name=".activities.MainActivity"
android:exported="true"
android:label="@string/app_name"
android:alwaysRetainTaskState="true"
android:theme="@style/AppTheme.NoActionBar">