我的APP在接收ACTION_SCREEN_OFF时必须开始一些耗时的工作,如果作业仍在进行,则在接收ACTION_SCREEN_ON时中断作业。
public class TimeConsumingWorkIntentService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
TimeConsumingWork();
}
}
public class ScreenStatusReceiver extends BroadcastReceiver {
Intent intent = new Intent(mContext, TimeConsumingWorkIntentService.class);
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
mContext.startService(intent );
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
mContext.stopService(intent );
}
}
}
通过打印时间记录,我发现耗时的工作仍在停止TimeConsumingWorkIntentService(接收ACTION_SCREEN_ON时)。
为什么?答案 0 :(得分:3)
使用
// Cancel the runnable
myHandler.removeCallbacks(yourRunnable);
好的,那么你可以做这样的事情
Runnable r = new Runnable{
public void run(){
if(booleanCancelMember != false){
// within this you make the call to handler and work
// Since you block the call the handler wont get repeated
}
}
}
答案 1 :(得分:0)
你不能那样做。当您启动IntentService
时,它将在单独的工作线程上调用onHandleIntent()
。那个方法然后调用TimeConsumingWork()
。停止服务不会中断工作线程的执行。它只是告诉工作线程,当它完成处理当前Intent
时,它应该停止。
您需要做的是定期查看TimeConsumingWork()
方法是否应该停止。您可以通过设置static boolean
变量并TimeConsumingWork()
定期检查此变量并退出(如果已设置)来执行此操作。
您无需在stopService()
上致电IntentService
,因为它无关紧要时会自行停止。