我有一个异步运行的代码,它是从主线程调用的。它可以被主线程多次调用。我希望一旦通过主线程启动它的新实例就完成先前执行的异步任务的执行。
我在java中使用取消AsyncTask尝试了它。但是,只有在doInBackground(params ..)之后才能使用calcel。所以这不起作用
能以某种方式实现吗?我也试过把这个异步任务放在线程中。但是不知道如何取消线程启动的操作。
答案 0 :(得分:0)
在你的线程中声明一个布尔运行。然后包装doInBackground&的执行。运行语句时中的onPostExecute。保持对asynctask的引用,如果不为null,则将运行设置为false,这应该会终止旧任务。然后创建一个新的。
*编辑:通过杀死旧任务,我的意思是因为它早完成
答案 1 :(得分:0)
所以这里是:
private MyTask mMyTask
doInBackground()
方法中,您必须不时检查任务是否已取消。如果您有for loop
,那么您通常会以for(int i=0;i<0;!isCancelled();i++)
或while循环while(myCondition && !isCancelled()){...}
mMyTask.cancel(); mMyTask=new MyTask(); mMyTask.execute();