Android中运行任务和运行进程之间的区别

问题描述:

任何人都可以告诉我Android和Task中的任务和进程有什么区别。 如果我使用这段代码片段。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)之间的差异。

请帮帮我。 问候

getRunningAppProcesses()

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

getRunningTasks (int maxNum)

返回的当前正在运行的任务列表,其中最近的是第一和旧的,为了以后。请注意,“运行”并不意味着任何任务的代码当前已加载或活动 - 该任务可能已被系统冻结,以便在下一次进入前台时以前一状态重新启动该任务。

更新:

现在任务过程之间的差。

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

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

所以,当你调用getRunningAppProcesses()它会给你所有运行Android应用程序的进程相关的运行应用程序组件。

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

+0

这个答案只是复制粘贴从页面原来的问题派生而来。另外两个答案解释它换句话说。 – Bamerza

+0

@Bamerza - 实际上之前的答案与更新前的问题有关。感谢您的意见,我根据新的主题和问题信息更新了答案。 – user370305

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

其实在Android任务=应用程序中是一组活动。

进程通过内存分隔进行划分,并且是一组运行的线程是分开的内存。

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

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

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

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

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

activityManager.getRunningTasks(Integer.MAX_VALUE) 

上面会给你正在运行的任务或者说让把它应用由一系列的活动。 (列表RunningTaskInfo对象)。这反过来将有两个主要的事情。

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

activityManager.getRunningAppProcesses() 

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

  1. processName:这个对象与
  2. PID相关联的进程的名称:该进程的PID;如果没有,则返回0
  3. uid:此进程的用户标识。
  4. pkgList:所有已加载到进程中的软件包。