如何判断是否需要在UI线程上运行代码

时间:2018-04-04 12:07:11

标签: android multithreading android-activity

我在我的应用程序中使用了一个工作线程,因此了解哪些代码可以从工作线程运行以及哪些代码需要在UI线程上运行对我来说至关重要。

在Android文档中,可以找到以下提示:

  

因此,您不能在工作线程中操纵UI - 您必须这样做   从UI线程到用户界面的所有操作。 [...]   但请注意,您无法从除以外的任何线程更新UI   UI线程或“主”线程。

source

但是“对用户界面的操纵”在实践中意味着通常不像看起来那么清晰。当然,很明显,您无法隐藏视图,操作按钮文本,添加列表视图条目等来自工作线程。

但是,例如,从工作线程调用setRequestedOrientation()呢?这是允许的还是属于UI操作,因此必须从UI线程调用?是否有任何方法可以告诉或者我是否应该保持安全并且在有疑问时更好地在UI线程上运行代码?

1 个答案:

答案 0 :(得分:1)

通常,您应该从API文档中获取指导​​。例如,Activity.onCreate()明确指出:

  

必须从应用程序的主线程调用此方法。

对于您给出Activity.setRequestedOrientation()的示例,没有明确声明应该在特定线程上调用该方法。通常,如果涉及线程,文档将说明。

如果您愿意确定,那么您也打电话给Activity.runOnUiThread()