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

Posted

技术标签:

【中文标题】Android中进程、活动、线程和任务的区别【英文标题】:Difference between Process,Activity,Threads and Tasks in Android 【发布时间】:2017-11-22 21:21:00 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

一个非常好的问题,根据我在 android 开发方面的一点经验,我想贡献一下。让我们从……开始吧。

流程

曾经在 Windows 上打开任务管理器来查看打开的应用程序吗?这些是过程。在 android 上,当启动应用程序时,会打开一个新进程并分配内存等。 活动类、导入和线程都在Android系统中构成一个进程。有时,当应用程序崩溃时,您会看到一条错误消息“不幸的是 com.android.bakerapp 已停止。” 这意味着一个错误会导致线程、导入、活动的整个过程关闭。所以基本上,进程是应用程序的一部分,或者一般来说是正在运行的应用程序。

活动

Activity 是所有 android 应用程序的核心和灵魂,所有的 Threads、preferences、views 和 layouts 都是由 android Activity 类打开的。它是包含视图、传递信息和运行线程的容器对象。活动通过意图、类中的对象扩展和方法相互通信。 Activity 是一段代码,它创建和传达 UI 以及用户看到和使用的一切。它用于创建线程。这将在下面讨论。

线程

这很简单,线程基本上是一个完成某事的进程,它在工作之后生死。想象一下,您有一个在屏幕上显示图片视图的活动,并且您希望使用库自动将您的应用主题颜色设置为图片上最常见的颜色。

最好的方法是在用户不知道的情况下执行此操作,并且还会混淆负责将图片从网站加载到视图中的主线程,这是使用异步任务(在后台运行的东西)打开一个线程的一个示例一个线程。

所以线程基本上是一个要完成的任务的生命周期,它可以是连续的(主要活动视图和列表视图)或短的(在图片中查找主色)或有趣和多任务处理(从群聊,同时在 WhatsApp 上与你的女朋友聊天)。

线程是所有活动和流程中最重要的部分,可以发送、接收和处理数据。

Activity 不能在没有线程的情况下工作,因为 setContentview 和 UI 本身只是另一个线程,您可以在一个 Activity 中拥有多个线程。

编码愉快!

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

【讨论】:

【参考方案3】:

我知道这是旧的,但你也可以说线程是代码执行的最小单元。线程被安排在 CPU 上运行。一个进程可以有一个或多个线程。

【讨论】:

以上是关于Android中进程、活动、线程和任务的区别的主要内容,如果未能解决你的问题,请参考以下文章

FreeRTOS创建任务和创建线程有些啥区别

程序任务进程和线程的联系与区别

请问android系统中的进程,任务,服务三者的区别和联系?

java多线程以及Android多线程

Android中使用Thread线程与AsyncTask异步任务的区别

什么是线程、什么又是多线程 它们之间有什么区别呢?