跨活动处理服务并发送数据

时间:2018-11-01 03:49:30

标签: android service broadcastreceiver

我正在尝试从一个活动启动服务以进行api调用,并在另一个活动中获取其结果。我使用BroadcastReceiver接收数据,但是在从服务发送广播之前,如何确保已创建活动并连接了接收器。我的设计方式有问题吗?

谢谢。

编辑:为简单起见,我在调用该应用程序时开始播放3秒钟的动画。我不想浪费时间,所以我尝试从网络获取数据,然后将其显示在动画结束后调用的活动上。我以为IntentService是要走的路,但是如果不行,请建议我如何去做。

1 个答案:

答案 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();
}