什么是Android UiThread(UI线程)

z4bn682m  于 2023-06-20  发布在  Android
关注(0)|答案(3)|浏览(471)

有人能给我解释一下UI线程到底是什么吗?在www.example.com上developer.android.com它介绍了runOnUiThread函数
public final void runOnUiThread(Runnable action)
自:API级别1在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发送到UI线程的事件队列。
UI线程是否意味着每当Activity被某些UI Activity(如来电或屏幕变暗等)推送到后台时,都会运行此线程?如果没有,UI线程到底包括什么?
谢谢你

nc1teljy

nc1teljy1#

UIThread是应用程序的主执行线程。这是运行大部分应用程序代码的地方。所有应用程序组件(Activities、Services、ContentProviders、BroadcastReceivers)都在此线程中创建,对这些组件的任何系统调用都在此线程中执行。
例如,假设您的应用程序是一个Activity类。然后,所有生命周期方法和大部分事件处理代码都在此UIThread中运行。这些方法包括onCreateonPauseonDestroyonClick等。此外,这是对UI进行所有更新的地方。任何导致UI更新或更改的操作都必须在UI线程上发生。
For more info on your application's Processes and Threads click here.
当您显式地生成一个新线程以在后台工作时,此代码不会在UIThread上运行。那么,如果这个后台线程需要做一些改变UI的事情,会发生什么呢?这就是runOnUiThread的作用。实际上,你应该使用一个处理程序(请参阅下面的链接了解更多信息)。它为这些后台线程提供了执行可以修改UI的代码的能力。它们通过将UI修改代码放在Runnable对象中并将其传递给runOnUiThread方法来实现这一点。
有关生成工作线程并从它们更新UI的更多信息,请单击此处
我个人只在我的Instrumentation Tests中使用runOnUiThread方法。由于测试代码不在UIThread中执行,因此需要使用此方法来运行修改UI的代码。因此,我使用它将单击和按键事件注入到应用程序中。然后,我可以检查应用程序的状态,以确保发生了正确的事情。
有关在UIThread上测试和运行代码的更多信息,请单击此处

mklgxw1f

mklgxw1f2#

如果您执行阻塞代码(例如HTTP请求),请考虑使用AsyncTask。它的doInBackground-方法在一个单独的线程上运行。AsyncTask为您提供了onProgressUpdateonPostExecute方法,保证在UI线程上运行
如果您需要GUI进度更新(例如通过进度条)在doInBackground内部调用publishProgress。这将导致随后调用onPublishProgress,它也保证在UI线程上运行
doInBackground返回后自动调用onPostExecute

1szpjjfi

1szpjjfi3#

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

相关问题