BroadcastReceive如何告诉服务?

时间:2011-05-29 17:08:02

标签: android loops service handler broadcastreceiver

在主活动上单击按钮以启动服务

该服务将完成这些工作:

1,今天随机10个时间戳

2,当每个时间戳到来时,它将执行任务

现在我已经编写了函数1,当第一个时间戳到来时,我可以开始第一个任务

我的方法是通过alarmmanager注册一个广播接收器来获取时间戳,当第一个广播被触发时,然后注册第二个时间戳,等等......

这是我的问题: 当广播接收器被触发时,如何告诉服务注册下一个时间戳,然后完成整个工作?

或者是实现我服务的其他方式吗?

提前感谢!

1 个答案:

答案 0 :(得分:0)

我认为你不应该这样做。

我可以在你的方法中看到至少两个缺点: - 警报管理员太忙了 - 您无法从其他广播接收器注册brocast接收器

另一种更好的方法是使用handler.postDelayed方法:

您的服务应该让处理人员在几秒钟内(当您需要时)自行回来

@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {    
    //do some treatment based on the action intent
    //first action is used to compute 10 time stamps

    //second action is used to treat task

    //then use a handler to reschedule your service
    handler.postDelayed( new Runnable() {
        @Override
        public void run() {
           onStartCommand( <intent for action 2>, flags, startId);
           Log.v( LOG_TAG, "timer sending intent");
        }
    }, delayInMsToNextTask  );
}//met

因此,无法使用广播接收器。

我忘了说你应该在你的清单文件中为两个意图行动注册你的服务。

<service android:name="myService">
    <intent-filter>
      <action android:name="action1" />
    </intent-filter>
    <intent-filter>
      <action android:name="action2" />
    </intent-filter>
</service>

此外,添加单个操作可能会很好,但要区分onStartCommand应该使用具有相同名称的意图中的额外内容。然后,您的服务将在您的清单中注册一个操作。

下次,如果您觉得您的解释不太清楚,请发送一些代码/伪代码。

此致  斯特凡