【问题标题】:Is main thread the same as UI thread?主线程和UI线程一样吗?
【发布时间】:2010-07-16 01:42:20
【问题描述】:

Android 文档说“与活动和其他组件一样,服务在应用程序进程的主线程中运行。”

这里的主线程和UI线程一样吗?

【问题讨论】:

  • 与接受的答案(和引用的文档)中的陈述相反,在某些情况下,主线程和 UI 线程可能不同。完整答案在这里:stackoverflow.com/a/40795895/2463035

标签: android


【解决方案1】:

看起来像。引用自http://android-developers.blogspot.com/2009/05/painless-threading.html:“应用启动时,系统会为应用创建一个名为“main”的线程。主线程,也叫UI线程……”,官方API文档。

【讨论】:

  • 注意:这仅适用于 Android。在其他 Java 应用程序中,您的“主”线程特别不是 UI 线程,理论上您甚至不应该在主线程上创建 GUI(尽管几乎每个人都这样做,但我认为它还没有杀死任何人)
  • 请注意,这个答案并不完全准确(由于它引用的官方文档不准确)。此处提供此问题的完整答案:stackoverflow.com/a/40795895/2463035
  • 答案中指出的 API 文档的更新声明 (developer.android.com/guide/components/…) :但是,在特殊情况下,应用程序的主线程可能不是其 UI 线程;有关详细信息,请参阅线程注释 (developer.android.com/studio/write/…)。
【解决方案2】:

UI 线程主线程 仅在 Android 中相同。

主线程,负责处理UI 事件,如Draw、Listen 和接收UI 事件

Ans 还负责与运行的 UI 工具包组件 进行交互,以用于所属的相应应用程序。

当应用程序中发生用户事件时,主线程 *

需要在队列中添加事件-> 贴心的关于事件到 合适的视图 -> 改变视图的状态 -> 重绘视图 根据状态变化 -> 等待响应 特定事件动作 -> 在提示和事件动作完成后 需要删除队列中的事件。

*

上面的每一个动作都由主线程处理(不仅仅是上面的操作,它是UI线程处理的操作之一),所以如果我们的应用程序无法响应大约 5 秒 的事件 android 将显示错误 “未响应”

因此,只有广泛建议在 UI 线程 中执行轻量级进程。

希望这个答案有点详细,对像我这样的新安卓蜜蜂有所帮助。 我刚刚分享了我对 UI Thread 的了解。如果我在任何地方出错了,请随时纠正我。

【讨论】:

    【解决方案3】:

    基本上主线程是 Ui 线程。
    但是有时它们可​​能是不同的胎面!
    系统应用程序可以在不同线程上具有多个视图。
    此外,如果您使用支持注释,请注意 @MainThread@UiThread 同时可用。
    在这里,您使用第一个注释与应用生命周期相关的方法,并使用负责视图层次结构的第二个方法。
    https://developer.android.com/studio/write/annotations.html

    【讨论】:

      【解决方案4】:

      “主应用程序线程”有时也称为“UI 线程”。

      【讨论】:

      • 如果主线程是 UI 线程并且文档说服务在主线程上运行,那么您能否建议我,那么为什么服务不会阻塞 UI 线程服务如何工作?
      • @Erum:“文档说服务在主线程上运行”——不,文档没有。在 Java 编程中,对象不在线程上运行。方法在线程上运行。 ServiceonCreate()onStartCommand()onBind()onDestroy())的生命周期方法在主应用程序线程上被调用,并且在主应用程序线程上从这些方法完成的任何工作都将阻止 UI更新。服务通常为长时间运行的任务派生线程。有些类,比如IntentService,为你提供了这样的线程;否则,你自己的 fork。
      • “主应用程序线程”有时也称为“UI 线程”。那你能解释一下在哪些情况下主线程被称为ui线程,哪些不是
      • @AmandeepRohila:不同的作者使用术语“主应用程序线程”和“UI 线程”来指代同一个线程。您将不得不询问这些作者为什么选择使用他们所做的特定术语。我通常坚持使用“主应用程序线程”,因为该线程不仅仅与 UI 相关联。
      【解决方案5】:

      每个 Activity 都有自己的 UI 线程。 VM 启动后,Zygote 就会启动 System Server。 Activity Manager Service 等所有其他服务均由 System Server 在新线程中启动。

      【讨论】:

      • 我不认为这是相当正确的:(除非您的意思是“应用程序”而不是“活动”):“系统不会为每个线程创建单独的线程组件的实例。” - 见developer.android.com/guide/components/… - 当然你可以要求每个组件(活动、服务等)在清单文件中都有自己的进程,但默认情况下不这样做。
      【解决方案6】:

      是的。主线程是 UI 线程。

      请参阅this tutorial 了解有关 android 后台处理的完整详细信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多