我有一项服务,在一定延迟后执行操作。我想在服务启动时显示通知,并且在单击通知时取消操作。没有UI,都在后台完成。该服务由广播接收器启动时启动。
理想情况下,我希望每1秒更新一次通知,以显示剩余时间。
... start operation thread and call thread.sleep(delay)
... create notification builder (nBuilder)
try { // example assume delay = 30 seconds
for (int sec = 30; sec >= 0; --sec) {
nBuilder.setContentText("Applying settings in " + sec + ", Click to cancel");
mNotifyMgr.notify(0x01, nBuilder.build());
Thread.sleep(1000);
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
如何在点击通知时打破此循环?这段代码在我的服务中。据我所知,响应click的唯一方法是设置挂起的intent,但是如何使用这个intent来打破循环并取消我服务中的操作?
感谢您阅读
答案 0 :(得分:0)
在BroadcastReceiver
中创建Service
。点击通知后,使用会触发PendingIntent
的{{1}}。运行BroadcastReceiver
中的onReceive()
方法时,它可以取消BroadcastReceiver
中的操作。
答案 1 :(得分:0)
谢谢大卫,但我找到了一个更简单的解决方案
我刚刚对我的线程进行了成员引用,并为设置了取消标志的服务创建了一个挂起的意图,并且它检索了相同的服务实例,因此我能够中断该线程。
我不确定我是否能很好地解释这个问题,但我想为什么不分享解决方案。