Android 中进程、活动、线程和任务的区别

Var*_*rma 2 multithreading android process task android-activity

以上所有有什么区别?我发现了各种有用但也很混乱的帖子。简而言之,根据我的理解,这就是我想到的:

  • 线程是共享相同资源的任务
  • 进程是具有独立资源的任务。一个进程可以有多个线程。
  • 任务是正在执行的指令
  • 现在这是我感到困惑的地方。android 中的 Activity 与这三者的关系如何?Activity 可以有多个任务,所以它必须是一个过程。但是活动和过程之间有什么区别。此外,我在某处读到任务是一系列活动。这让我整个人都糊涂了。我还读到所有活动都在 UI 线程上运行,这只会使区别变得更加混乱。

小智 5

您应该区分进程和线程与活动与任务。他们甚至不属于同一类别。

让我们从最简单的开始,Task的. 假设您不是在谈论任何实际的类,即 TimerTask,Task 的基本概念如下。当用户第一次启动您的应用程序时,会创建一个新任务。您可以通过按“OverviewButton”(软件按钮的正方形表示)来查看这一点。(在 Android 5.0 及更高版本上)任务不会被处理,除非用户实际从概览屏幕中删除(向左/向右滑动)它。因此,任务实际上只是用户的高级抽象。就像你提到的,一个任务有一个 Activity backstack,它只是一个普通的堆栈,用于跟踪用户的“历史”。例如,您的应用程序启动,您的 MainActivity 将位于堆栈底部,用户输入一些值,然后继续执行新的 Activity。现在这个新的 Activity 高于上一个,

现在对于Processes & Thread 来说,Android 下的 Processes 与 linux 进程非常相似,您的应用程序通常只会在一个进程中工作。操作系统会为进程分配内存的某个部分,如果您熟悉 C 等语言,则尝试访问不属于您的进程的内存将导致“分段错误”。

就像你说的,一个进程可能有任意数量的Threads,假设操作系统可以管理所需的开销。一个进程至少有一个线程,在android下这称为Main-Thread或UI-Thread。线程,基本上,允许你并行地做一些工作。您很可能需要使用它们,例如在执行网络操作时。

现在对于活动,它们与多线程没有直接关系。当前的“活动活动”是在 UI 线程上运行的活动。所以它的所有回调都将在 UI-Thread 上运行,除非特别说明不这样做。Activity 是 android 框架使用的抽象,它存在于与 Processes & Thread 完全不同的级别。您可以从您想要的任何线程调用活动中定义的方法。