在Android上,当我查看“设置”时 - > “App”,在“运行”选项卡下,我可以看到内存被切入部分:“已用内存”和“无内存”,应用程序也被放入“已用内存”或“无内存”。 “无内存”部分中的应用程序被标记为“缓存后台进程”。
那么,什么是“缓存后台进程”?它们仍然在内存中,而不是切换到“磁盘”(就像台式机/笔记本电脑那样),对吧?当用户选中其中一个“缓存的后台进程”时,它会立即显示在内存中,就像正在运行的进程一样,对吗?
Android“缓存”应用程序时会做什么?
答案 0 :(得分:44)
那么,什么是“缓存后台进程”?
由于您要求对设备UI中列出的内容进行技术解释,因此如果设备制造商选择修改“设置”应用,则定义可能会因设备而异。
话虽如此,“缓存的后台进程”通常是指没有前台活动且没有正在运行的服务的进程。这些进程只是因为我们有足够的内存来保存在内存中,因此,正如您所注意到的,用户可以快速切换回这些进程。由于Android开始需要更多的系统RAM用于其他进程,“缓存的后台进程”往往是被终止以释放系统RAM的进程。
“缓存后台进程”的一个突出示例是用户启动应用程序,短暂戳它,然后按HOME返回主屏幕。如果该进程没有正在运行的服务,我希望将其列为“缓存后台进程”。
它们仍然在内存中,而不是切换到“磁盘”(就像台式机/笔记本电脑一样),对吗?
正确。 Android设备不使用交换空间。
答案 1 :(得分:19)
为什么不查看"Setting" app's source code。
在我的Nexus 4中,“设置” - > “App” - > “跑步”看起来如下。
在开始之前, Android Process中的重要性层次结构中有五个级别。 这些是
1)前景过程,
2)可见过程,
3)服务流程,
4)背景过程,
5)空流程
您可以在"Processes and Threads" document in Android Developer site找到更多详情。
我确实查看了代码,结果显示“SHOW CACHED PROCESSES”显示了那些重要层次结构等于或低于“后台进程”的进程 即可。另一方面,“显示运行服务”显示 ,其重要性层次结构等于“可见进程”或更高 。我放弃了一些细节以清楚地表明要点。您可以看到此部分here的完整源代码。
try {
final int numProc = mAllProcessItems.size();
int[] pids = new int[numProc];
for (int i=0; i<numProc; i++) {
pids[i] = mAllProcessItems.get(i).mPid;
}
...
for (int i=0; i<pids.length; i++) {
ProcessItem proc = mAllProcessItems.get(i);
changed |= proc.updateSize(context, pss[i], mSequence);
if (proc.mCurSeq == mSequence) {
serviceProcessMemory += proc.mSize;
} else if (proc.mRunningProcessInfo.importance >=
ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
backgroundProcessMemory += proc.mSize;
MergedItem mergedItem;
if (newBackgroundItems != null) {
mergedItem = proc.mMergedItem = new MergedItem(proc.mUserId);
proc.mMergedItem.mProcess = proc;
diffUsers |= mergedItem.mUserId != mMyUserId;
newBackgroundItems.add(mergedItem);
} else {
...
}
...
} else if (proc.mRunningProcessInfo.importance <=
ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
foregroundProcessMemory += proc.mSize;
}
}
} catch (RemoteException e) {
}
所以,回到你的问题,
它们仍然在内存中,而不是切换到“磁盘”(就像台式机/笔记本电脑一样),对吗?
是的,它们仍在内存中,但最终Android系统可能需要删除旧进程以回收新内存或更重要进程的内存。要确定要保留哪些进程以及要删除哪些进程,系统会将每个进程置于“重要性层次结构”中。
当用户选中其中一个“缓存的后台进程”时,它会立即显示在内存中,就像正在运行的进程一样,对吧?
Android“缓存”应用程序时会做什么?
AFAIK,它只是不会终止进程并保持资源,以便在他/她回来时立即回复用户。
答案 2 :(得分:1)
流程排名
Android操作系统试图维持应用程序运行一段时间 尽可能,但是当可用内存很低时,它会尝试释放资源 系统通过杀死具有较低重要性的进程来发挥作用。
这是流程排名进入画面的时候; Android进程是 在从较高优先级到较低优先级的下一个五类中排名:
当系统到达需要释放资源的点时,进程 考虑到最后使用的过程等级,可以对被杀的进行排序 流程和组件正在运行。
来源:
异步Android编程 - 第二版 - Helder Vasconcelos - 2016年7月