2014-10-10 98 views
0

我在我的应用程序中实现了AsyncTask,以正确地从互联网下载文件并将数据放入本地数据库。文件正在下载,一切正常。我也检查是否有互联网连接,如果没有任何,我在我的doInBackground方法返回0,什么导致我的AsyncTask调用“onPostExecute”方法,并且一切都按照它应该。但是我看到,如果互联网连接不好,例如我处于我的WiFi范围的边缘,AsyncTask有时会下载文件几分钟。这不是我想要的。所以我在onPreExecute方法处理程序中实现了我的AsyncTask。如何正确处理Android中的AsyncTask取消?

isFreezed = new Handler(); 
isFreezed.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     if (!isCancelled() && getStatus() != AsyncTask.Status.FINISHED){ 
      cancel(true); 
      //Log.i("callingActivity", "Zbyt wolne połączenie, anulowanie."); 
      onPostExecute((long) 0); 
     } 
    } 
},8000); 

我取消我的AsyncTask。我看到,当我取消它时,onPostExecute方法没有执行,所以我手动调用它。这就是我的问题,谷歌说,它不应该手动调用。 我的思维方式很好,把处理程序取消任务,并继续与我的应用程序是一个很好的做法,或者我应该以其他方式吗? 我是对的,当我将取消AsyncTask,它的onPostExecute方法不会被调用?

+1

有上要取消的任务,被炒鱿鱼的异步任务的onCancelled()重写。 – kha 2014-10-10 10:27:13

回答

2

对于您可以使用异步任务像

private class AsyncTaskDemo extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Showing progress dialog 
     progressDialog = new ProgressDialog(MainActivity.this); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.setCancelable(true); 
     progressDialog.show(); 

    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     // Creating service handler class instance 

     // do stuff according to your need 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     // Dismiss the progress dialog 
     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
     } 

    } 

    @Override 
    protected void onCancelled() { 

     super.onCancelled(); 
     progressDialog.dismiss(); 
     Toast toast = Toast.makeText(MainActivity.this, 
       "Error connecting to Server", Toast.LENGTH_LONG); 
     toast.setGravity(Gravity.TOP, 25, 400); 
     toast.show(); 

    } 

} 
+0

是的。简单地取消处理程序中的任务,而不是在那里调用onPostExecute,但只是使用onCancelled做了诡计;)谢谢! – 2014-10-10 10:37:01

+0

好的太棒了...... :) – 2014-10-10 10:52:52