【问题标题】:Difference between Running Task and Running Process in AndroidAndroid中运行任务和运行进程的区别
【发布时间】:2011-11-16 08:04:15
【问题描述】:

谁能告诉我Android中的Task和Process有什么区别。 如果我使用这个代码sn-p。

ActivityManager Appmgr;
protected List<ActivityManager.RunningTaskInfo> apps;
protected List<ActivityManager.RunningAppProcessInfo> applications;
applications = Appmgr.getRunningAppProcesses();
apps = Appmgr.getRunningTasks(30);

applications = Appmgr.getRunningAppProcesses()apps = Appmgr.getRunningTasks(30) 有什么区别。

请帮助我。 问候

【问题讨论】:

    标签: android


    【解决方案1】:

    之前的“答案”是用另一个未知主题替换一个未知主题。问题是关于系统定义,而不是关于如何接收相关信息以及方法和类之间的区别。

    其实在Android task= 应用程序中是一组activity。

    进程是由内存分离划分的,并且是一组运行的线程是分离的内存。

    默认情况下,应用程序是一个进程。开发者可以通过在“activity”、“service”、“receiver”等manifest时间内定义可执行单元中的“android:process”属性来定义另一个进程分离。

    http://developer.android.com/guide/components/processes-and-threads.html

    【讨论】:

      【解决方案2】:

      getRunningAppProcesses ()

      返回 RunningAppProcessInfo 记录列表,如果没有正在运行的进程,则返回 null(它不会返回空列表)。此列表排序未指定。

      getRunningTasks (int maxNum)

      返回当前正在运行的任务列表,最近的任务排在第一位,老任务排在后面。请注意,“正在运行”并不意味着任务的任何代码当前已加载或处于活动状态——该任务可能已被系统冻结,以便在下次进入前台时可以以之前的状态重新启动。

      更新:

      现在TaskProcess之间的区别。

      在 Android 中,Task 是一组或者您可以说是一组活动。这都是关于用户与这些活动的交互。 Android 在堆栈中维护这些活动,因此它们被打开并维护此堆栈。可能是一个堆栈或多个堆栈,堆栈顶部的最后一个打开的活动。它是 android 如何维护系统状态的。一个应用程序有它自己的任务和它打开的活动,如果新的应用程序启动,系统会在 LIFO 结构中创建一个具有新活动的新任务。当用户在主屏幕上与这个任务交互时,他只是导航到特定的应用程序,这个应用程序的任务现在变成了前台。

      虽然 Process 与 Android 应用程序组件有关。每个新的 Android 应用程序都在其自己的用户空间中的新进程(Linux 进程)中启动。默认情况下,所有应用程序组件都在同一进程上运行。它作为单线程进程执行。这就是为什么它被称为应用程序的主线程。但是在这里您可以使用清单属性android:process 为不同的android 应用程序组件定义单独的进程,例如Activity、Service、Provider 或Broadcast Receiver。 Android 进程与具有 UserId 的 Linux 进程具有相同的基础,因此您可以将运行在具有相同 UserId 的同一进程上的不同 android 应用程序组件组合在一起。

      所以当你调用getRunningAppProcesses()时,它会为你提供所有正在运行的Android应用程序与运行应用程序组件相关的进程。

      getRunningTasks (int maxNum) 为您提供在用户与应用程序交互时系统为不同运行的应用程序创建的任务列表。

      【讨论】:

      • 这个答案只是从原始问题的页面复制粘贴。其他两个答案“换句话说”解释它。
      • @Bamerza - 实际上之前的答案与更新前的问题有关。感谢 cmets 我已根据新主题和问题信息更新了答案。
      【解决方案3】:

      Android 有 Linux 内核。所以进程类似于Linux中的进程。每个进程可以有多个线程。当一个进程启动时,默认情况下是单线程执行。该线程称为主线程或 UI 线程。您可能有其他工作线程或异步线程在进程中运行。

      另一方面,任务或应用程序可以可视化为应用程序中的一组活动。任务中的每个活动都可能被配置为在不同的进程中运行。 Android 的其他权利 - 服务、提供程序等也是如此。不同任务/应用程序的实际组件可以在同一进程中运行(前提是应用程序共享相同的 Linux 用户 ID 并使用相同的证书进行签名)。

      当运行应用程序的系统内存不足时,旧进程将被终止。再次注意这可能有不同应用程序的组件。

      activityManager.getRunningTasks(Integer.MAX_VALUE)
      

      上面将为您提供正在运行的任务,或者更确切地说,我们将其称为由一组活动组成的应用程序。 (RunningTaskInfo 对象列表)。这反过来将有两个主要的事情。

      1. baseActivity : 组件作为任务中的第一个活动启动
      2. topActivity : 任务历史堆栈顶部的活动组件

      activityManager.getRunningAppProcesses()
      

      上面将给出系统中所有正在运行的进程。由于它是一个进程,它将关联pid (processId) 和`uid (userId)。这里的一些重要字段是 -

      1. processName : 与此对象关联的进程的名称
      2. pid : 该进程的pid;如果没有,则为 0
      3. uid : 此进程的用户 ID。
      4. pkgList : 已加载到进程中的所有包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        • 2018-03-31
        • 1970-01-01
        • 2012-06-29
        • 2017-01-24
        • 1970-01-01
        • 2016-10-05
        相关资源
        最近更新 更多