Jac*_*kWM 27 android background-process
在Android上,当我查看"设置" - >"应用程序"时,在"运行"选项卡下,我可以看到内存被切入到部分:"已用内存"和"无内存",应用程序也被放入进入"二手记忆",或"无记忆"."无内存"部分中的应用程序被标记为"缓存后台进程".
那么,什么是"缓存后台进程"?它们仍然在内存中,而不是切换到"磁盘"(就像台式机/笔记本电脑那样),对吧?当用户选中其中一个"缓存的后台进程"时,它会立即显示,因为它仍在内存中,就像正在运行的进程一样,对吧?
Android在"缓存"应用程序时会做什么?
Com*_*are 45
那么,什么是"缓存后台进程"?
由于您要求对设备UI中列出的内容进行技术解释,因此如果设备制造商选择修改"设置"应用,则定义可能因设备而异.
话虽这么说,"缓存的后台进程"通常是指没有前台活动且没有正在运行的服务的进程.这些进程只是因为我们有足够的内存来保存在内存中,因此,正如您所注意到的,用户可以快速切换回这些进程.由于Android开始需要更多的系统RAM用于其他进程,"缓存的后台进程"往往是被终止以释放系统RAM的进程.
"缓存后台进程"的一个突出示例是用户启动应用程序,短暂戳它,然后按HOME返回主屏幕.如果进程没有正在运行的服务,我希望将其列为"缓存的后台进程".
它们仍然在内存中,而不是切换到"磁盘"(就像台式机/笔记本电脑那样),对吧?
正确.Android设备不使用交换空间.
김준호*_*김준호 19
为什么不查看"设置"应用程序的源代码.
在我的Nexus 4中,"设置" - >"应用程序" - >"正在运行"如下所示.
在开始之前,Android Process中的重要性层次结构中有五个级别. 这些是
1)前景过程,
2)可见过程,
3)服务过程,
4)后台过程,
5)空过程
您可以在Android Developer站点的"进程和线程"文档中找到更多详细信息.
我确实研究过代码,事实证明"SHOW CACHED PROCESSES"显示了那些重要性层次等于或低于"后台进程"的进程.另一方面,"显示运行服务"显示其重要性等级等于"可见过程"或更高的那些.我放弃了一些细节以清楚地表明要点.您可以在此处查看此部分的完整源代码.
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) {
}
Run Code Online (Sandbox Code Playgroud)
那么,回到你的问题,
它们仍然在内存中,而不是切换到"磁盘"(就像台式机/笔记本电脑那样),对吧?
是的,它们仍在内存中,但最终Android系统可能需要删除旧进程以回收新内存或更重要进程的内存.为了确定要保留哪些进程以及要杀死哪些进程,系统将每个进程放入"重要性层次结构".
当用户选中其中一个"缓存的后台进程"时,它会立即显示,因为它仍在内存中,就像正在运行的进程一样,对吧?
对.例如,保持"空进程"存活的唯一原因是下次组件需要在其中运行时改善启动时间.
Android在"缓存"应用程序时会做什么?
AFAIK,它只是不会杀死进程并保持资源在他/她回来时立即回复用户.
归档时间: |
|
查看次数: |
55492 次 |
最近记录: |