什么是Android的UiThread(UI线程)

有人可以向我解释什么是UI线程? 在developer.android.com它说runOnUiThread函数

public final void runOnUiThread(Runnable action)

从以下版本开始:API级别1在UI线程上运行指定的操作。 如果当前线程是UI线程,则立即执行该动作。 如果当前线程不是UI线程,则将该操作发布到UI线程的事件队列中。

用户界面线程是否意味着每当活动被来电或屏幕调光等一些用户界面活动推到背景时,都会运行这个线程? 如果没有,UI线程究竟包含什么?

谢谢

UIThread是您的应用程序的主要执行线程。 这是大多数应用程序代码运行的地方。 所有应用程序组件(Activities,Services,ContentProviders,BroadcastReceivers)都在此线程中创建,并且在此线程中执行对这些组件的任何系统调用。

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

有关应用程序的进程和线程的更多信息,请单击此处。

当你显式产生一个新的线程在后台工作,这个代码不在UIThread上运行。 那么如果这个后台线程需要做一些改变用户界面的事情呢? 这是runOnUiThread的用途。 其实你应该使用处理程序(请参阅下面的链接了解更多信息)。 它为这些后台线程提供了执行可以修改UI的代码的能力。 他们通过将UI修改代码放入Runnable对象并将其传递给runOnUiThread方法来完成此操作。

有关产卵工作者线程和更新用户界面的更多信息,请单击此处

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

有关UIThread测试和运行代码的更多信息,请单击此处

如果您在单独的线程中执行阻止代码(例如Http-Request),请考虑使用AsyncTask 。 它的doInBackground在一个单独的线程上运行。 AsyncTask提供了onProgressUpdateonPostExecute方法, 保证在UI线程上运行

如果您需要GUI进度更新(例如通过进度条),请在doInBackground调用doInBackground 。 这导致onPublishProgress的后续调用。

onPostExecutedoInBackground返回后自动调用。

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