在Android上,什么是正在运行的进程和缓存后台进程之间的区别?(On Android, what

2019-07-18 01:37发布

在Android上,当我看着“设置” - >“应用程序”,该选项卡中“跑”下,我可以看到内存被切割成到部分:“使用的内存”和“可用内存”,也是应用程序将被放成“使用的存储器”或“空闲存储器”。 在“空闲内存”部分的应用程序标记为“缓存的后台进程”。

那么,什么是“缓存的后台进程”? 他们仍然在内存中,而不是切换到“磁盘”(如台式机/笔记本电脑做的),对吗? 当用户选项卡中,这些“缓存的后台进程”的一个,它会立即显示,因为它仍然是在内存中,就像一个正在运行的进程,对不对?

什么是Android的做,当“缓存”的应用程序?

Answer 1:

那么,什么是“缓存的后台进程”?

因为你所要求的设备中的用户界面中列出一些技术解释,定义可通过设备,因人而异,如果设备制造商与当选设置应用程序进行修补。

话虽这么说,“缓存的后台进程”通常是指不具有前景的活性,并没有正在运行的服务流程。 这些过程都保存在内存中,只是因为我们有足够的内存来做到这一点,因此,当你注意,用户可以快速切换至这些过程。 由于Android的开始需要另外的过程更多的系统内存,将“缓存的后台进程”往往是得到停止,以释放系统内存的过程。

一个“缓存的后台进程”的杰出例子将是其中的用户推出的应用程序,简要周围戳,然后按下HOME键返回主屏幕。 如果过程没有运行的服务,我希望找到它列为“缓存的后台进程”。

他们仍然在内存中,而不是切换到“磁盘”(如台式机/笔记本电脑做的),对吗?

正确。 Android设备不使用交换空间。



Answer 2:

为什么不考虑在“设置”应用程序的源代码 。

在我的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的做,当“缓存”的应用程序?

据我所知, 它只是不杀过程,让资源立即响应用户,当他/她回来。



Answer 3:

流程行列

Android操作系统试图保持尽可能长时间运行的应用程序,但是当可用内存不足,它会用较低的重要性FRST查杀进程试图释放资源在系统中。

这是当过程中的排名进入画面; Android的过程都排在下一FVE类别来自较高优先级到较低优先级:

  • 前台进程 :这是托管的活动或服务的用户当前交互的过程:服务在前台或服务开始运行其生命周期回调
  • 可见工艺 :这是承载暂停活动或服务界的可见活动的过程
  • 服务流程:这是主机未绑定到一个可见的活动服务的过程
  • 后台进程 :这是承载不可见活动的过程; 所有的后台进程进行排序在最近最少使用(LRU)列表,因此,最近使用的工艺是最后被杀的过程时,他们
  • 空过程 :这是用于缓存不活动的Android组件以及改善任何组件启动时的处理

当系统达到它需要释放资源的一个点,可以被杀死的进程将被排序,考虑到工艺等级,最后用流程和组件的运行。

资料来源

异步编程的Android - 第二版 - 埃尔德洛斯 - 2016年七月



文章来源: On Android, what's the difference between running processes and cached background processes?