Android 限制后台进程数量/不保留活动
Android 限制后台进程数量/不保留活动
>> Don't keep activities
>> Background process limit
手动设置
进入系统设置 --> 打开开发者选项 --> 找到“不保留后台活动”/ “后台进程限制”-->按需设置
调用系统API设置
引入权限
<uses-permission android:name="android.permission.SET_PROCESS_LIMIT" />
<uses-permission android:name="android.permission.SET_ALWAYS_FINISH" />
调用设置
import android.app.ActivityManager;
import android.app.IActivityManager;
import android.os.RemoteException;
try {
IActivityManager am = ActivityManager.getService();
am.setProcessLimit(0);
am.setAlwaysFinish(true);
} catch (SecurityException e) {
} catch (RemoteException e) {
}
注意权限的问题,一般需要system app才可设置
查看设置信息
进到系统设置里,应该也可以看到UI已经按照设置变化了,或者使用命令查看
1. dumpsys activity settings 看如下值的变化
mOverrideMaxCachedProcesses=4
CUR_MAX_CACHED_PROCESSES=4
2. settings get global always_finish_activities
console:/ $ settings get global always_finish_activities
1
不保留活动还可以如下设置
settings put global always_finish_activities 1
import android.provider.Settings;
Settings.Global.putInt(this.getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 1);
补充几句
可以查看如下档案:
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerConstants.java
里面的定义了默认最大可以缓存的进程数量
private static final int DEFAULT_MAX_CACHED_PROCESSES = 32;
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
ActivityManagerServic中提供了对外操作的方法,可以清楚看到,方法中首先去检查权限
@Override
public void setProcessLimit(int max) {
enforceCallingPermission(android.Manifest.permission.SET_PROCESS_LIMIT,
"setProcessLimit()");
synchronized (this) {
mConstants.setOverrideMaxCachedProcesses(max);
}
trimApplications(OomAdjuster.OOM_ADJ_REASON_PROCESS_END);
}
@Override
public void setAlwaysFinish(boolean enabled) {
enforceCallingPermission(android.Manifest.permission.SET_ALWAYS_FINISH,
"setAlwaysFinish()");
long ident = Binder.clearCallingIdentity();
try {
Settings.Global.putInt(
mContext.getContentResolver(),
Settings.Global.ALWAYS_FINISH_ACTIVITIES, enabled ? 1 : 0);
synchronized (this) {
mAlwaysFinishActivities = enabled;
}
} finally {
Binder.restoreCallingIdentity(ident);
}
}
参考
https://blog.csdn.net/qq_34694875/article/details/103906890
标签:
Android开发技术
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!