所以,我正在设计一个通过蓝牙加密狗与某些硬件交互的Android应用程序。
请求/响应模型有点慢(有时需要1-2秒才能收到对特定请求的响应),因此我将请求发送并将响应接收模型保存在不同的线程中。
为了达到同样的目的,我创建了一个接口ResultPoster
,其中包含一些回调方法,如onMyResponse()
。
此界面由我的应用程序的各种Activity
和UI组件实现,但我们知道我们无法直接从另一个帖子发布到 UI或Main 线程,因此我在所有UI组件中使用runOnUIthread
(基本上是活动或片段)。
e.g。
runOnUiThread(new Runnable() {
@Override
public void run() {
stopProgressDialog();
launchActivity();
}
});
现在我的代码中存在很多这样的块,并且随着某些逻辑变得复杂,它们也在增加。
现在,我想保持我的代码干净并在整个应用程序中创建一个桥梁,这将帮助我将结果从另一个线程发布到UI,只是基于我所进入的context
。
你能建议我采取其他方法吗?
- 编辑 -
在各种活动中使用多个此类代码块来实现相同目标是否过分?
答案 0 :(得分:5)
您可以创建一个自定义Application类,您可以在其中自己创建某种runOnUiThread方法。
它看起来像这样:
/**
* @author Dirk Vranckaert
*/
public class MyApplication extends Application {
private static final Handler mHandler = new Handler();
public static final void runOnUiThread(Runnable runnable) {
if (Thread.currentThread() == Looper.getMainLooper().getThread()) {
runnable.run();
} else {
mHandler.post(runnable);
}
}
}
然后,从应用程序中的任何类,您应该能够调用MyApplication.runOnUiThread(new Runnable(){..});
如果你可以使用lambdas,这甚至会看起来更好。 但是你明白了,你只需要在自定义Application类中使用便捷方法,并且可以从任何地方调用它。