2012-10-25 91 views
1

我在我的活动中调用一个函数,这基本上是一个异步任务,通过webservice从远程服务器获取数据。如何取消异步任务

private void myAsyncTask() { 
      new AsyncTask<Object, Object, Object>() { 

       @Override 
       protected void onPreExecute() { 

        progress_Dialog = ProgressDialog.show(a, "", "Loading"); 

       } 

       @Override 
       protected Integer doInBackground(Object... params) { 


        try 
        { 
        try { 

         MenuService menuService = new MenuServiceImpl(); 

         MenuServiceResponse partnerMenu; 
          partnerMenu = menuService.getMenu(); 

         productlist=Menu.getMenu().getMenuEntries(); 

         System.gc(); 
         return 0; 
        } catch (myServiceException e) { 
         bgFlag=true; 

         e.printStackTrace(); 
        } 
        } 
        catch (Exception e) { 

         bgFlagForserviceExeption=true; 
         e.printStackTrace(); 


        } 
        }       return 0; 
       } 


       @Override 
       protected void onPostExecute(Object result) { 
        if (progress_Dialog != null) { 

         progress_Dialog.dismiss(); 

        } 

        try 
        { 

         if(bgFlagForserviceExeption) 
         { 
          MyAlertDialog.ShowAlertDialog(ShopActivity.this, "", "Please try again later", "OK"); 

         } 
         if(bgFlag==false) 
         { 
        adapter = new ShopAdapter(
          ShopActivity.this, productlist); 

            allproduts.setAdapter(adapter); 
         } 
         else 
         { 
          MyAlertDialog.ShowAlertDialog(ShopActivity.this, "", " Please try again later", "OK"); 

         } 


        } 
        catch(Exception e) 
        { 
         adapter=null; 
       } 

       } 

      }.execute(); 



} 

当我把这个活动的进度条会显示,直到doinbackground()ends.How我可以从手机按后退按钮后台进程退出,现在的问题是,我将不得不等待,直到即使我按下后退按钮,后台进程也会完成。如何才能达到此效果

+1

你不能用'doInBackground'做到这一点是这样的...'AsyncTask.cancel'只能帮助,那么你在'doInBackground'循环,在你每一次迭代做的事情检查isCancelled(),然后打破循环... – Selvin

+1

更多的explenation(关于为什么'AsyncTask.cancel'不适用于此)...实际上有一个很大的机会,你的代码“卡住”在' getMenu()'或'getMenuEntries()'方法和'doInBackground'你没有可能停止他们的... – Selvin

+1

http://stackoverflow.com/questions/6356956/onbackpressed-doesnt-trigger-when-showing-progressdialog – Selvin

回答

1

覆盖后退按钮。

Here it is

在这简单地调用asynctack.cancel(真);

Read here

+3

尊敬的用户如果给予反对票,您能给出理由吗?所以我可以改善我的下一篇文章 – Abhi

+0

与其他文章相同,并且我在问题asynctack.cancel(true)中的评论中写道;将无法正常工作 – Selvin

+0

Selvin伟大并继续保持 – Abhi