首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是安卓UiThread (UI线程)

什么是安卓UiThread (UI线程)
EN

Stack Overflow用户
提问于 2010-09-06 23:20:34
回答 3查看 83K关注 0票数 87

有人能给我解释一下UI线程到底是什么吗?在developer.android.com上,它是关于runOnUiThread函数的

公共最终无效操作(Runnable runOnUiThread )

因为: API级别1在UI线程上运行指定的操作。如果当前线程是UI线程,则会立即执行该操作。如果当前线程不是UI线程,则将操作发送到UI线程的事件队列。

UI线程是否意味着每次活动被某些ui活动(如来电或屏幕调光等)推送到后台时都会运行该线程?如果不是,那么UI线程到底包括什么?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-07 02:13:30

UIThread是应用程序执行的主线程。这是运行大多数应用程序代码的地方。所有的应用程序组件(活动、服务、ContentProviders、BroadcastReceivers)都是在这个线程中创建的,对这些组件的任何系统调用都是在这个线程中执行的。

例如,假设您的应用程序是单个Activity类。然后,所有的生命周期方法和大部分事件处理代码都在这个UIThread中运行。这些方法包括onCreateonPauseonDestroyonClick等。此外,这也是对UI进行所有更新的地方。任何导致UI更新或更改的事情都必须发生在UI线程上。

For more info on your application's Processes and Threads click here.

当您显式地派生一个新线程在后台执行工作时,此代码不会在UIThread上运行。那么,如果后台线程需要做一些改变UI的事情,会发生什么呢?这就是runOnUiThread的用途。实际上,您应该使用Handler (参见下面的链接了解更多信息)。它为这些后台线程提供了执行可以修改UI的代码的能力。它们通过将修改UI的代码放在一个Runnable对象中并将其传递给runOnUiThread方法来实现这一点。

For more info on spawning worker threads and updating the UI from them click here

我个人只在我的指令插入测试中使用runOnUiThread方法。由于测试代码不会在UIThread中执行,因此您需要使用此方法来运行修改UI的代码。因此,我使用它将单击和按键事件注入到我的应用程序中。然后,我可以检查应用程序的状态,以确保发生了正确的事情。

For more info on testing and running code on the UIThread click here

票数 149
EN

Stack Overflow用户

发布于 2014-02-05 21:57:24

如果您在单独的线程中执行阻塞代码(例如,Http请求),请考虑使用AsyncTask。它的doInBackground-Method运行在单独的线程上。AsyncTask为您提供了方法onProgressUpdateonPostExecute保证它们可以在UI线程上运行。

如果您需要图形用户界面进度更新(例如,通过进度条),请在doInBackground中调用publishProgress。这导致随后调用onPublishProgress,该调用也是保证在UI线程上运行。

doInBackground返回后,会自动调用onPostExecute

票数 10
EN

Stack Overflow用户

发布于 2010-09-06 23:48:25

所有的UI绘图等都发生在一个单独的线程中。它被称为UIThread。如果你想对你必须使用的UI进行任何更改,请确保它发生在UIThread的上下文中。最简单的方法是使用runOnUiThread

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3652560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档