Java 如何在应用程序实例中异步初始化对象?
我有一个消息“服务”(不是Android服务),我想在应用程序的onCreate中初始化它一次,然后向所有应用程序组件提供这个“服务” 问题是MessageBus应该在单独的线程上初始化,因为它执行一些网络操作 如果客户端试图访问MessageBus实例,如何消除竞争条件?比如说,活动试图获取MessageBus,但它仍然没有初始化Java 如何在应用程序实例中异步初始化对象?,java,android,Java,Android,我有一个消息“服务”(不是Android服务),我想在应用程序的onCreate中初始化它一次,然后向所有应用程序组件提供这个“服务” 问题是MessageBus应该在单独的线程上初始化,因为它执行一些网络操作 如果客户端试图访问MessageBus实例,如何消除竞争条件?比如说,活动试图获取MessageBus,但它仍然没有初始化 public interface ServiceProvider { public MessageBus getMessageBus();
public interface ServiceProvider {
public MessageBus getMessageBus();
}
public class MyApplication extends Application implements ServiceProvider {
private MessageBus messageBus;
@Override
public void onCreate(){
super.onCreate();
new Thread(new Runnable() {
@Override
public void run() {
try {
messageBus = new MessageBusImpl();
} catch (Exception e) {
Log.d(TAG, "Failed to init MessageBus");
e.printStackTrace();
}
}
}).start();
}
Override
public MessageBus getMessageBus() {
return messageBus;
}
}
您可以将闪屏活动添加到应用程序中(或在对话框中显示进度条,或以任何其他方式锁定应用程序),并在所有应用程序元素完全初始化时保持其可见。向用户显示任何内容(特别是如果init操作可能需要一段时间)是非常重要的,因为它会向用户提供某种反馈,说明应用程序实际上正在做一些事情 编辑
如果您想通知其他组件安装完成,那么observer模式()应该可以达到这个目的。例如,在您的应用程序对象中,您可以公开方法,如
setOnSetupCompletedListener()
,安装完成后,您可以让所有注册的侦听器都知道。谢谢,但问题是如何通知ServiceProvider客户端初始化已完成。@您可以通过LocalBroadcastManager发送广播。