Android中运行任务与运行进程的区别

时间:2011-11-16 08:04:16

标签: android

任何人都可以告诉我Android中的任务和流程有什么区别。 如果我使用此代码段。

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)之间的区别是什么。

请帮帮我。 此致

3 个答案:

答案 0 :(得分:8)

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

实际上在Android task = application中是一组活动。

进程是按内存分离划分的,并且运行的线程集是分开的内存。

默认情况下,应用程序是一个过程。通过使用“活动”,“服务”,“接收器”中的“android:process”属性以及清单时间内可执行单元的其他定义,开发人员能够通过进程定义另一个分离。

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

答案 1 :(得分:7)

getRunningAppProcesses ()

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

getRunningTasks (int maxNum)

返回当前正在运行的任务列表,其中最新的是第一个和更早的任务。请注意,“运行”并不意味着任何任务的代码当前已加载或活动 - 该任务可能已被系统冻结,因此可以在下次将其置于前台时以其先前状态重新启动。

更新:

现在任务流程之间存在差异。

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

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

因此,当您致电getRunningAppProcesses()时,它将为您提供与运行应用程序组件相关的所有正在运行的Android应用程序。

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

答案 2 :(得分:3)

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

另一方面,

任务或应用程序可以显示为应用程序中的一组活动。任务中的每个活动都可能配置为在不同的进程中运行。同样适用于Android的其他权利 - 服务,提供商等。不同任务/应用程序的实际组件可以在同一进程中运行(前提是应用程序共享相同的Linux用户ID并使用相同的证书进行签名)。

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

activityManager.getRunningTasks(Integer.MAX_VALUE)

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

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

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

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