Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 取消正在执行的任务_Android_Android Asynctask - Fatal编程技术网

Android 取消正在执行的任务

Android 取消正在执行的任务,android,android-asynctask,Android,Android Asynctask,当我登录到我的应用程序时,一个异步任务开始执行,当该任务正在执行且我注销应用程序时,该任务仍在运行,并在一段时间后给出结果(尽管我已注销)。我想问,有没有办法取消那个任务,这样它就不会给我结果 class AsyncClass extends AsyncTask<>{ @Override protected String doInBackground(Void... params) { if(isCancelled())

当我登录到我的应用程序时,一个异步任务开始执行,当该任务正在执行且我注销应用程序时,该任务仍在运行,并在一段时间后给出结果(尽管我已注销)。我想问,有没有办法取消那个任务,这样它就不会给我结果

  class AsyncClass extends AsyncTask<>{

    @Override
     protected String doInBackground(Void... params)
      {
             if(isCancelled())
               {
                Log.d("isCancelled", iscancelled());
               }
          //call the webservice

      }
    }
但是,
iscancelled()
中的Log语句永远不会被调用。

是的,这是可能的

YourAsyncTask mTask;
 if(mTask!=null) mTask.cancel(); 
谢谢

是的,这是可能的

YourAsyncTask mTask;
 if(mTask!=null) mTask.cancel(); 

谢谢

是的,您可以使用取消异步任务。您可以创建AsyncTask类的实例并调用

if(task != null && task.equals(AsyncTask.Status.RUNNING))
task.cancel(true);

是,您可以使用取消异步任务。您可以创建AsyncTask类的实例并调用

if(task != null && task.equals(AsyncTask.Status.RUNNING))
task.cancel(true);
根据此使用任务。取消(true);和被取消()

私有类更新库扩展异步任务{
private ProgressDialog=新建ProgressDialog(Library.this);
private int total=Library.instance.appState.getAvailableText().length;
私有整数计数=0;
//当按下后退按钮时,用作取消任务的处理程序
私有异步任务updateTask=null;
@凌驾
受保护的void onPreExecute(){
updateTask=this;
设置ProgressStyle(ProgressDialog.STYLE_水平);
dialog.setOnDismissListener(新的OnDismissListener(){
@凌驾
公共void onDismiss(对话框接口对话框){
updateTask.cancel(true);
}
});
setMessage(“更新库…”);
dialog.setMax(总计);
dialog.show();
}
@凌驾
受保护的布尔doInBackground(无效…arg0){
对于(int i=0;i
根据此使用任务。取消(true);和被取消()

私有类更新库扩展异步任务{
private ProgressDialog=新建ProgressDialog(Library.this);
private int total=Library.instance.appState.getAvailableText().length;
私有整数计数=0;
//当按下后退按钮时,用作取消任务的处理程序
私有异步任务updateTask=null;
@凌驾
受保护的void onPreExecute(){
updateTask=this;
设置ProgressStyle(ProgressDialog.STYLE_水平);
dialog.setOnDismissListener(新的OnDismissListener(){
@凌驾
公共void onDismiss(对话框接口对话框){
updateTask.cancel(true);
}
});
setMessage(“更新库…”);
dialog.setMax(总计);
dialog.show();
}
@凌驾
受保护的布尔doInBackground(无效…arg0){
对于(int i=0;i
就在一天前,我遇到了同样的问题:)

其他三个答案的混合对我来说很有用

首先在字段上声明asyncTask:

private MyTaskClass miTask;
在onCreate/onResume上,如果活动:

miTask = new MyTaskClass();
然后您可以用任何方法执行它

miTask.execute();
在“暂停/停止”中:

miTask.cancel(true);
只有在doInBackground中选中isCancelled(),这才有效,我为游标访问创建了一个示例,如果片段被取消,游标访问已经关闭:

@Override
    protected Void doInBackground(Void... params) {
        cached = true;
        int idIndex = currentCursor.getColumnIndex(Contacts._ID);
        int displayNameIndex = currentCursor
                .getColumnIndex(Contacts.DISPLAY_NAME);

        while (currentCursor.moveToNext()) {
            if (isCancelled()) {
                break;
            }
希望对你有所帮助,问候你。
亚历克斯

我一天前也有同样的问题:)

其他三个答案的混合对我来说很有用

首先在字段上声明asyncTask:

private MyTaskClass miTask;
在onCreate/onResume上,如果活动:

miTask = new MyTaskClass();
然后您可以用任何方法执行它

miTask.execute();
在“暂停/停止”中:

miTask.cancel(true);
只有在doInBackground中选中isCancelled(),这才有效,我为游标访问创建了一个示例,如果片段被取消,游标访问已经关闭:

@Override
    protected Void doInBackground(Void... params) {
        cached = true;
        int idIndex = currentCursor.getColumnIndex(Contacts._ID);
        int displayNameIndex = currentCursor
                .getColumnIndex(Contacts.DISPLAY_NAME);

        while (currentCursor.moveToNext()) {
            if (isCancelled()) {
                break;
            }
希望对你有所帮助,问候你。
亚历克斯检查。我同意Lalit的回答,发生的是,我从web服务获取数据。同时有6个自动售货机正在运行。问题是当first async任务开始执行并注销时,当我使用不同的用户登录时,第一个asyntask不会再次执行。这有意义吗?检查。我同意Lalit的回答,发生的是,我从web服务获取数据。同时有6个自动售货机正在运行。问题是当first async任务开始执行并注销时,当我使用不同的用户登录时,第一个asyntask不会再次执行。这有意义吗?它永远不会被取消()。可能是什么问题?isCancelled()总是返回false:(抱歉,我不能…。但我可以通过伪代码向您显示发生了什么。检查我的编辑它永远不会被isCancelled()。可能是什么问题?isCancelled()总是返回false:(抱歉,我不能…。但我可以通过伪代码向您显示发生了什么。检查我的编辑