为什么不看看"Setting" app's source code。
在我的 Nexus 4 中,“设置”->“应用”->“运行”如下所示。
在开始之前,Android 进程的重要性层次结构中有五个级别。这些是
1) 前台进程,
2)可见过程,
3) 服务流程,
4) 后台进程,
5) 清空进程
您可以在"Processes and Threads" document in Android Developer site找到更多详细信息。
我确实查看了代码,结果发现“SHOW CACHED PROCESSES”显示了那些重要性等级等于或低于“后台进程”的进程。另一方面,“SHOW RUNNING SERVICES” 显示那些重要性等级等于“可见进程”或更高的人。我删除了一些细节以清楚地显示要点。可以看这部分的完整源码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 系统可能需要删除旧进程,以便为新的或更重要的进程回收内存。为了确定保留哪些进程以及终止哪些进程,系统将每个进程置于“重要性层次结构”中。
当用户点击这些“缓存的后台进程”之一时,它会立即显示,因为它仍在内存中,就像正在运行的进程一样,对吧?
正确。例如the only reason to keep "Empty process" alive is to improve startup time the next time a component needs to run in it.
Android 在“缓存”应用程序时会做什么?
AFAIK,它根本不会终止进程并保留资源,以便在用户返回时立即响应用户。