gpt4 book ai didi

java - Android中如何正确处理AsyncTask取消?

转载 作者:行者123 更新时间:2023-12-02 05:23:31 24 4
gpt4 key购买 nike

我在我的应用程序中实现了 AsyncTask,以正确从互联网下载文件并将数据放入本地数据库中。文件正在下载,一切正常。我还检查是否有互联网连接,如果没有,我在 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 方法不会被调用,对吗?

最佳答案

为此,您可以使用异步任务,例如

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

}

}

关于java - Android中如何正确处理AsyncTask取消?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26297137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com