我正在尝试从一个活动启动服务以进行api调用,并在另一个活动中获取其结果。我使用BroadcastReceiver接收数据,但是在从服务发送广播之前,如何确保已创建活动并连接了接收器。我的设计方式有问题吗?
谢谢。
编辑:为简单起见,我在调用该应用程序时开始播放3秒钟的动画。我不想浪费时间,所以我尝试从网络获取数据,然后将其显示在动画结束后调用的活动上。我以为IntentService是要走的路,但是如果不行,请建议我如何去做。
答案 0 :(得分:1)
您可以使用Sticky Events库中的EventBus。基本上,它将在广播事件之前将您的数据缓存在内存中。数据可以传递给订户。因此,您不需要任何特殊的逻辑即可考虑已经可用的数据。
首先,您需要声明一个类来保存从网络获取的数据。
public class MyDataEvent {
String token;
// Write more properties here
}
在服务中,从网络获取数据后,将包含数据的事件发布给订户。
MyDataEvent data = new MyDataEvent();
data.token = "123456789abcxyz";
EventBus.getDefault().postSticky(data);
您要接收数据的活动中
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
// UI updates must run on MainThread
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMyDataEvent(MyDataEvent data) {
// Process the data here
Log.i("TAG", data.token);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}