有人可以向我解释一下UI线程到底是什么吗?在developer.android.com上说到runOnUiThread函数
public final void runOnUiThread(可运行操作)
从以下版本开始:API级别1在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列。
UI线程是否意味着每次通过诸如呼叫或屏幕变暗等ui活动将活动推到后台时,都将运行该线程?如果不是,那么UI线程到底包含什么?
谢谢
Answers:
UIThread是应用程序执行的主要线程。这是运行大多数应用程序代码的地方。您的所有应用程序组件(活动,服务,ContentProviders,BroadcastReceivers)都在此线程中创建,并且对这些组件的任何系统调用均在此线程中执行。
例如,假设您的应用程序是单个Activity类。然后,所有生命周期方法和大多数事件处理代码都在此UIThread中运行。这些都是类似的方法onCreate,onPause,onDestroy,onClick,等。此外,这是所有的更新到用户界面制成。导致UI更新或更改的任何事情都将在UI线程上发生。
当您显式产生一个新线程以在后台工作时,该代码不会在UIThread上运行。那么,如果该后台线程需要做一些改变UI的事情会发生什么呢?这就是runOnUiThread它的用途。实际上,您应该使用Handler(有关更多信息,请参见下面的链接)。它为这些后台线程提供了执行可以修改UI的代码的功能。他们通过将修改UI的代码放在Runnable对象中并将其传递给runOnUiThread方法来实现。
我个人仅runOnUiThread在“仪器测试”中使用该方法。由于测试代码不在UIThread中执行,因此您需要使用此方法来运行修改UI的代码。因此,我用它来将点击和按键事件注入到我的应用程序中。然后,我可以检查应用程序的状态,以确保发生正确的事情。
AsyncTask而不是runOnUiThread吗?
AsyncTask将您从主线程中移出,进入后台;runOnUiThread()将使您从后台进入主线程。因此,这取决于您要完成的工作。
所有UI绘图等均发生在单独的线程中。它称为UIThread。如果要对UI进行任何更改,则必须使用UI并确保它发生在UIThread的上下文中。最简单的方法是利用runOnUiThread