我知道如果需要内存,android SO可以杀死活动和进程。
问题1: 如果它在前台,安卓可以杀死一个活动吗?
问题2: 如果活动在前台,安卓可以杀死活动的进程吗?
答案 0 :(得分:3)
Android processes and application lifecycle document声明:
前台流程
...
系统中只会有一些这样的过程,而这些过程 如果记忆力太低而且不均匀,那么它只会作为最后的手段被杀死 这些过程可以继续运行。一般来说,此时, 设备已达到内存分页状态,因此需要执行此操作 为了保持用户界面的响应。
这意味着您的活动(以及流程)可以被杀死,但仅限于极端的记忆条件和最后的手段。空进程,后台进程,服务进程和可见进程都将在您的进程被杀死之前全部被杀死,因此非常不太可能发生这种情况但是如果让应用程序保持打开状态会导致系统出现问题不稳定。
答案 1 :(得分:0)
为每个进程分配一个OOM分数。得分取决于进程类,并且通常在Android OOM杀手开始考虑前台进程之前还有其他进程要杀死。但是,还有其他类的优先级高于前景,并且某人(供应商?)完全有可能在设备中填充了如此多的内存饥饿的持久进程,而OOM必须杀死一些前台类。虽然我会说这不太可能。什么" dumpsys meminfo"说什么?
答案 2 :(得分:-1)
答案1:是的。
答案2:请更好地解释。
恢复:您可以获取所有正在运行的进程并杀死具有指定pid的进程
向清单添加2个权限:
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
稍后使用此代码获取PID并稍后终止进程
ArrayList<Integer> pids = new ArrayList<Integer>();
ActivityManager manager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> listOfProcesses = manager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : listOfProcesses)
{
if (pids.contains(process.pid))
{
// Ends the app
manager.restartPackage(process.processName);
}
}