如何在Android主线程上执行代码而无需访问活动?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我有一个Android服务,启动并维护后台线程。

有时后台线程需要在主线程上进行回调。我很难理解如何做到这一点。

我不能调用this.runOnUiThread,因为“this”是Service的一个实例,而不是Activity,并且一个Service没有runOnUiThread方法。

我也不能创建或执行AsyncTask,因为AsyncTask的文档说构造函数和execute方法都必须从UI线程中调用。

我是否需要维护对使用该服务的活动的引用并调用其runOnUiThread方法,还是有另一种方法在UI线程上运行某些内容?

提问于
用户回答回答于

它需要在主线程上进行回调,以便更新UI元素。

使用LocalBroadcastManager并让服务发送一个广播,由活动接收,这会在主应用程序线程中获取它。

或者,使用“真正的”广播sendBroadcast()

或者,Messenger正如你所提到的那样,使用a ,像HandlerGuillermo提到的那样绑定到a ,尽管你不一定需要使用绑定。

用户回答回答于

如果我不持有直接访问活动(由于某种原因或其他原因),我会不时使用以下代码;

new Handler(Looper.getMainLooper()).post(mYourUiThreadRunnable);

扫码关注云+社区