在安卓中,进程、活动、线程和任务的区别是什么?

3
所有上述的东西有什么区别?
我发现各种帖子都很有帮助,但也很令人困惑。根据我的理解,简而言之,这就是我得出的结论:
- 线程是共享相同资源的任务。 - 进程是具有独立资源的任务。一个进程可以有多个线程。 - 任务是正在执行的指令。
现在这就是我感到困惑的地方。在Android中,活动与这三个有什么关系。活动可以有多个任务,因此它必须类似于进程。但是,活动和进程之间有什么区别?此外,我在某个地方读到说任务是活动的堆栈。这让我感到非常困惑。我还读到所有活动都在UI线程上运行,这使得区分更加困难。
3个回答

8
你需要区分进程和线程与活动和任务。它们甚至不属于同一类别。
让我们从最简单的开始,任务。假设你没有谈论任何实际的类,例如TimerTask,任务的基本概念如下。 当用户第一次启动您的应用程序时,将创建一个新任务。您可以通过按“概述按钮”(由软件按钮表示为正方形,在Android 5.0及更高版本中)来查看此内容。 任务不会被处理,除非用户实际上从概述屏幕中删除(向左/向右滑动)它。 因此,任务实际上只是用户的高级抽象。 正如你所提到的,任务具有活动后堆栈,这只是用于跟踪用户“历史记录”的普通堆栈。例如,启动您的应用程序,您的MainActivity将位于堆栈底部,用户输入一些值,然后转到新活动。现在,此新活动在先前活动之上,用户可以随时按“返回按钮”返回到先前的活动。
现在对于进程和线程,Android下的进程与Linux进程非常相似,您的应用程序通常只能在一个单独的进程中工作。操作系统会为进程分配一定的内存部分,如果您熟悉像C这样的语言,尝试访问不属于您的进程的内存将导致“段错误”。
如你所说,进程可能具有任意数量的线程,假设操作系统可以管理所需的开销。 进程至少会有一个线程,在Android下称为Main-Thread或UI-Thread。线程非常基本,允许您并行执行一些工作。您很可能需要使用它们,例如在执行网络操作时。
现在对于活动,它们与多线程没有直接关系。当前“活动的活动”是在UI-Thread上运行的活动。因此,除非明确说明,否则所有回调都将在UI-Thread上运行。 活动是Android框架使用的抽象,它存在于与进程和线程根本不同的级别。您可以从任何想要的线程中调用在Activity中定义的方法。

2
一个非常好的问题,从我对Android开发的一点经验来看,我想做出贡献。让我们从...开始。
进程
在Windows上打开任务管理器查看打开的应用程序吗?那些就是进程。在Android上,当一个应用程序启动时,会打开一个新的进程并分配内存等资源。活动类、导入和线程都在Android系统中创建进程。有时候你会看到一个错误消息,当一个应用程序崩溃时,“不幸地com.android.bakerapp已停止运行。” 这意味着一个错误导致整个线程、导入和活动的进程关闭。因此,进程是一个应用程序或一个正在运行的应用程序的部分。
活动
活动是所有Android应用程序的核心和灵魂,所有线程、首选项、视图和布局都由Android活动类打开。它是容器对象,持有视图,传递信息,并运行线程。活动通过意图(intents)、类扩展和方法相互通信。活动是创建和通信用户界面及其使用的代码片段。它被用于创建线程,这将在下面讨论。
线程
这很简单,一个线程基本上是为了完成某项任务而存在的进程,它在工作完成后就会终止。想象一下,您有一个带有图片视图的活动,并且您想使用库自动将应用程序的主题颜色设置为图片上最常见的颜色。
最好的方法是在不让用户知道的情况下执行此操作,并且不会混淆负责从网站加载图片到视图的主线程,可以使用异步任务打开一个线程(在后台运行的任务)。
因此,线程基本上是要完成的任务的生命周期,可以是连续的(主活动视图和列表视图)或短暂的(查找图片中的主导颜色),也可以是有趣的多任务(同时从群聊中下载图片并与女友在WhatsApp上聊天)。
线程是所有活动和进程中最基本的部分,可以发送、接收和处理数据。
没有线程,活动无法工作,因为setContentview和UI本身也是另一个线程,您可以在一个活动中拥有多个线程。
祝编码愉快!

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


-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接