如何在调用startService()方法发送otto事件后知道何时启动服务?

时间:2017-07-28 06:34:24

标签: android service otto

我有一个AlarmReceiver(BrodcastReceiver)在检查服务是否未运行状态后启动DownloadService(Service

context.startDownloadServiceIfNotRunning()// kotlin extension function check service state

在此行之后,我将otto事件发送到之前启动的服务

BusStation.getBus().post(DownloadEvent())  // Actually this line fired before start of service

但即使是为事件注册,下载服务也没有收到此事件。

调试后我发现Otto事件在服务实际启动之前就已经开始因此它没有收到任何事件

所以有什么方法可以知道android服务何时正确启动以通过otto

接收事件

1 个答案:

答案 0 :(得分:0)

您可以向intent添加参数。如何使用参数,而不是奥托?

Intent serviceIntent = new Intent(this,DownloadService.class); 
serviceIntent.putExtra("Key", "Value");
startService(serviceIntent);

和onStart of service,您可以使用参数。

@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Bundle extras = intent.getExtras();

    if(extras == null) {
        // Do something
    } else {
        String value = (String) extras.get("Key");
        if (value.equals("Value")) {
            // Do same thing you want to do with Otto event.
        }
    }
}


编辑: 如果您的活动不是时间紧迫的活动,您可以简单地推迟活动。

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        BusStation.getBus().post(DownloadEvent());
    }
},1000);

否则,您需要创建自己的消息队列。