在主活动上单击按钮以启动服务
该服务将完成这些工作:
1,今天随机10个时间戳
2,当每个时间戳到来时,它将执行任务
现在我已经编写了函数1,当第一个时间戳到来时,我可以开始第一个任务
我的方法是通过alarmmanager注册一个广播接收器来获取时间戳,当第一个广播被触发时,然后注册第二个时间戳,等等......
这是我的问题: 当广播接收器被触发时,如何告诉服务注册下一个时间戳,然后完成整个工作?
或者是实现我服务的其他方式吗?
提前感谢!
答案 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应该使用具有相同名称的意图中的额外内容。然后,您的服务将在您的清单中注册一个操作。
下次,如果您觉得您的解释不太清楚,请发送一些代码/伪代码。
此致 斯特凡