在Android上,当我看着“设置” - >“应用程序”,该选项卡中“跑”下,我可以看到内存被切割成到部分:“使用的内存”和“可用内存”,也是应用程序将被放成“使用的存储器”或“空闲存储器”。 在“空闲内存”部分的应用程序标记为“缓存的后台进程”。
那么,什么是“缓存的后台进程”? 他们仍然在内存中,而不是切换到“磁盘”(如台式机/笔记本电脑做的),对吗? 当用户选项卡中,这些“缓存的后台进程”的一个,它会立即显示,因为它仍然是在内存中,就像一个正在运行的进程,对不对?
什么是Android的做,当“缓存”的应用程序?
那么,什么是“缓存的后台进程”?
因为你所要求的设备中的用户界面中列出一些技术解释,定义可通过设备,因人而异,如果设备制造商与当选设置应用程序进行修补。
话虽这么说,“缓存的后台进程”通常是指不具有前景的活性,并没有正在运行的服务流程。 这些过程都保存在内存中,只是因为我们有足够的内存来做到这一点,因此,当你注意,用户可以快速切换至这些过程。 由于Android的开始需要另外的过程更多的系统内存,将“缓存的后台进程”往往是得到停止,以释放系统内存的过程。
一个“缓存的后台进程”的杰出例子将是其中的用户推出的应用程序,简要周围戳,然后按下HOME键返回主屏幕。 如果过程没有运行的服务,我希望找到它列为“缓存的后台进程”。
他们仍然在内存中,而不是切换到“磁盘”(如台式机/笔记本电脑做的),对吗?
正确。 Android设备不使用交换空间。
为什么不考虑在“设置”应用程序的源代码 。
在我的Nexus 4,“设置” - >“应用程序” - >“运行”看起来像下面。
在开始之前, 有在Android的过程中的重要性阶层五个级别。 这些是
1)前台进程,
2)可见过程,
3)服务的方法,
4)背景过程,
5)空过程
你可以找到更多的细节“进程和线程”在Android开发者网站上的文档 。
我没有考虑代码,它变成了“显示缓存进程”中显示其重要性阶层比“后台进程”等于或低于这些进程。 在另一方面,“SHOW正在运行的服务”显示那些重要性阶层等于“可见过程”或更高 。 我放弃了一些细节,清楚地表明要点。 你可以看到这部分的完整的源代码在这里 。
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的做,当“缓存”的应用程序?
据我所知, 它只是不杀过程,让资源立即响应用户,当他/她回来。
流程行列
Android操作系统试图保持尽可能长时间运行的应用程序,但是当可用内存不足,它会用较低的重要性FRST查杀进程试图释放资源在系统中。
这是当过程中的排名进入画面; Android的过程都排在下一FVE类别来自较高优先级到较低优先级:
- 前台进程 :这是托管的活动或服务的用户当前交互的过程:服务在前台或服务开始运行其生命周期回调
- 可见工艺 :这是承载暂停活动或服务界的可见活动的过程
- 服务流程:这是主机未绑定到一个可见的活动服务的过程
- 后台进程 :这是承载不可见活动的过程; 所有的后台进程进行排序在最近最少使用(LRU)列表,因此,最近使用的工艺是最后被杀的过程时,他们
- 空过程 :这是用于缓存不活动的Android组件以及改善任何组件启动时的处理
当系统达到它需要释放资源的一个点,可以被杀死的进程将被排序,考虑到工艺等级,最后用流程和组件的运行。
资料来源 :
异步编程的Android - 第二版 - 埃尔德洛斯 - 2016年七月
文章来源: On Android, what's the difference between running processes and cached background processes?