Android中的进程,活动,线程和任务之间的区别

时间:2017-06-20 11:01:23

标签: android multithreading android-activity process task

以上所有有什么区别? 我找到了各种有用但也很混乱的帖子。根据我的理解,这就是我的目标:

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

3 个答案:

答案 0 :(得分:2)

一个非常好的问题,根据我对android开发的一点经验,我想做出贡献。让我们从......开始。

<强>过程

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

活动

活动是所有Android应用程序的核心和灵魂,所有线程,首选项,视图和布局都由android活动类打开。它是容器对象,它保存视图,传递信息并运行线程。活动通过意图,类扩展中的对象和方法相互通信。  Activity是创建和传递UI以及用户查看和使用的所有内容的代码段。它用于创建线程。这将在下面讨论。

<强>线程

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

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

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

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

没有线程,活动就无法工作,因为setContentview和UI本身只是另一个线程,你可以在一个活动中拥有多个线程。

快乐的编码!

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

答案 1 :(得分:2)

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

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

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

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

现在对于活动,它们与多线程没有直接关系。当前“活动的活动”是在UI-Thread上运行的活动。所以它的所有回调都将在UI-Thread上运行,除非特别记录不要。 Activity是android框架使用的抽象,它存在于与Processes&amp ;;基本不同的层面。线程的。您可以从任何所需的线程中调用Activity中定义的方法。

答案 2 :(得分:-1)

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