为了账号安全,请及时绑定邮箱和手机立即绑定

什么是AndroidUiThread(UI线程)

什么是AndroidUiThread(UI线程)

莫回无 2019-07-03 16:18:29
什么是AndroidUiThread(UI线程)有人能向我解释一下UI线程到底是什么吗?在developer.android.com上,它提到runOnUiThread函数公共最终无效runOnUiThread(可运行的操作)API级别1在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则该操作将被发布到UI线程的事件队列中。UI线程是否意味着每次活动被某些UI活动(如来电或屏幕调暗等)推送到后台时都会运行?如果没有,UI线程到底包括什么?谢谢
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

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

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

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

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

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

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


查看完整回答
反对 回复 2019-07-03
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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

如果您需要GUI-进度更新(例如通过进度条)调用publishProgressdoInBackground..这将导致随后调用onPublishProgress.

onPostExecute之后自动调用doInBackground退货。


查看完整回答
反对 回复 2019-07-03
?
烙印99

TA贡献1829条经验 获得超13个赞

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


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 3005 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信