Pra*_*eek 0 multithreading android design-patterns
所以,我正在设计一个通过蓝牙加密狗与某些硬件交互的Android应用程序.
请求/响应模型有点慢(有时需要1-2秒才能收到对特定请求的响应),因此我将请求发送和响应接收模型保存在不同的线程中.
为了达到同样的目的,我创建了一个ResultPoster带有一些回调方法的接口onMyResponse().
这个接口是由Activity我的应用程序的各种UI组件实现的,但是我们知道我们根本无法直接从另一个线程发布到UI或主线程,因此我runOnUIthread在所有UI组件中使用(基本上是活动或片段).
例如
runOnUiThread(new Runnable() {
@Override
public void run() {
stopProgressDialog();
launchActivity();
}
});
Run Code Online (Sandbox Code Playgroud)
现在我的代码中存在很多这样的块,并且随着某些逻辑变得复杂,它们也在增加.
现在,我希望保持我的代码干净,并在整个应用程序中创建一个桥梁,这将帮助我从另一个线程将结果发布到UI,只是基于context我所进入的.你能建议我一些其他方法吗?
-编辑-
在各种活动中使用多个这样的代码块实现相同的效果是否过分?
您可以创建一个自定义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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,从应用程序中的任何类,您应该能够调用MyApplication.runOnUiThread(new Runnable(){..});
如果你可以使用lambdas,这甚至会看起来更好.但是你明白了,你只需要在自定义Application类中使用便捷方法,并且可以从任何地方调用它.