我要疯了。我想要一件简单的事情--我有一个很长的任务(从网上获取几个数据对象),我想要取消它的能力。我尝试了很多东西,但都没有用。
流程是这样的:
用户点击一个按钮
AsyncTask、Service、IntentService和任务,包括为进度更新添加正在进行的通知)通知的意图是调用一个新的活动,她唯一的目的是取消正在进行的任务H 212H 113在cancelActivity中我试图为服务/IntentService调用stopService(),或者为Looper调用Looper.quit() (我不记得我尝试了为AsyncTask做什么,也不确定是否有这样的api用于取消)<>代码H 216G 217/code>
在我看来,最好的选择是使用IntentService (我可以有几个任务排队,IntetService会按照我想要的顺序来做),但是我对任何类型的实现都有建议--我不在乎代码是什么,只是我可以选择取消任务
预先感谢您的帮助
德罗尔
(我要上床睡觉了
发布于 2011-09-08 23:39:32
如果不识别背景逻辑中的停止条件,那么使用什么特定操作来停止任务并不重要。要想做到这一点,唯一的方法就是背景工作人员真诚地停下来并退出。
很少有可能的方案和解决方案可以用于取消后台工作。
isInterrupted()),如果此标志指示操作必须是isInterrupted()线程等待监视器,则退出。在后台线程上调用interrupt(),在异常处理程序中捕获异常,采取适当步骤干净地完成此任务,并且exit.在任何情况下,如果任务不知道被停止的可能性,就没有办法(除了杀死非常糟糕的线程)停止您的任务。
发布于 2011-09-09 11:26:51
好吧,我忙着做一些我想做的事。
我使用的是IntentService,它将使我的任务排队。每个新任务都是AsyncTask。AsyncTask从用pendingIntent为cancelActivity发送通知开始。
单击通知时,用户会收到关于停止任务的警告弹出。如果他比我点击“是”的话,stopService()就会出现在我的IntentService上。
在IntentService中,我添加了:
@Override
public void onDestroy() {
currentTask.cancel(true);
if (mNotificationHelper != null)
mNotificationHelper.completed();
super.onDestroy();
stopSelf();
}在AsyncTask中,我添加了:
@Override
protected void onCancelled() {
isCanclled = true;
httpClient.getConnectionManager().shutdown();
mNotificationHelper.completed();
if (mAsyncTaskListener != null)
mAsyncTaskListener.AsyncTaskCanceled();
}因此,这将放弃目前正在运行的所有连接。在执行此工作的实际代码中,我需要捕获连接关闭的异常并处理它。
因此,最后,我实际上并没有停止AsyncTask/Service,而是公开了httpClient,这样我就可以异步地删除连接了。
我觉得有点丑,但我没有别的办法
谢谢大家
https://stackoverflow.com/questions/7355499
复制相似问题