簡體   English   中英

如何在Android中正確處理AsyncTask取消?

[英]How properly handle AsyncTask cancelling in Android?

我在我的應用程序中實現了AsyncTask,以正確地從Internet下載文件並將數據放入本地DB。 文件正在下載,一切正常。 我還檢查是否有Internet連接,如果沒有,我在doInBackground方法中返回0,是什么導致我的AsyncTask調用“ onPostExecute”方法,並且一切正常。 但是我看到,如果互聯網連接狀況不佳,例如我處於WiFi范圍的邊緣,AsyncTask有時會下載文件幾分鍾。 這不是我想要的。 因此,我在onPreExecute方法處理程序中實現了我的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方法嗎?

為此,您可以使用Async任務,例如

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();

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM