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

Handling services and sending data across activities

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

提前致谢。

编辑:为了简单起见,我将在调用应用程序时启动一个 3 秒的动画。我不想浪费那个时间,所以我试图从网络获取数据,然后在动画结束后调用的 activity 上显示它。我认为 IntentService 是可行的方法,但如果不是,请建议我如何解决这个问题。

您可以使用 Sticky Events from EventBus 库。基本上它会在广播事件之前将您的数据缓存在内存中。数据可以传送给订阅者。因此,您不需要任何特殊逻辑来考虑已经可用的数据。

首先您需要声明一个 class 来保存您从网络获取的数据。

public class MyDataEvent {
    String token;
    // Write more properties here
}

在服务中,从网络获取数据后,post 包含数据给订阅者的事件。

MyDataEvent data = new MyDataEvent();
data.token = "123456789abcxyz";
EventBus.getDefault().postSticky(data);

在activity你要接收的数据

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