gpt4 book ai didi

android - 确定 AsyncTask 何时完成

转载 作者:行者123 更新时间:2023-11-29 16:07:50 24 4
gpt4 key购买 nike

我有一个从一个 Activity 启动的 AsyncTask。它将一些数据保存到 sqlite 数据库中,可能需要几秒钟才能完成。我在 onPreExecute() 中设置了一个标准进度条,在 onPostExecute() 中关闭它,并在 doInBackground(Void...arg0) 中做了一些工作。

任务完成后我需要返回 Activity 并完成()它。问题是我似乎无法弄清楚如何等待 AsyncTask 完成。我可以计算出状态,但这对我没有帮助。

    public class UpdateAsyncTask extends AsyncTask<Void, Void, Boolean> {

@Override
protected void onPreExecute() {
progress = new ProgressDialog(context);
progress.setMessage("Loading ...");
progress.show();
}

@Override
protected Boolean doInBackground(Void... arg0) {
// Do work
return true;

}

protected void onPostExecute() {
progress.dismiss();

}
}

我需要对主要 Activity 做什么才能在它完成后调用 finish()。感谢您的宝贵时间

更新执行任务

UpdateAsyncTask task = new UpdateAsyncTask(context);

task.setCallbackActivity(this);

task.execute();

更新 2aynctask 是一个单独的任务,因为我希望重新使用它

最佳答案

您可以使用如下接口(interface)实现回调:

接口(interface):

public interface CallbackActivity {
public void activityCallback();
}

在 Activity 中实现这个接口(interface):

public class myActivity extends Activity implements CallbackActivity{ 
@Override
public void activityCallback(){
finish();
}
}

你的 updateAsyncTask :

public class UpdateAsyncTask extends AsyncTask<Void, Void, Boolean> {
private CallbackActivity mCallback = null;
@Override
protected void onPreExecute() {
progress = new ProgressDialog(context);
progress.setMessage("Loading ...");
progress.show();
}

@Override
protected Boolean doInBackground(Void... arg0) {
// Do work
return true;

}

protected void onPostExecute() {
progress.dismiss();
if(this.mCallback != null) { this.mCallback.activityCallback(); }
}

public void setCallbackActivity(CallbackActivity ca) {
this.mCallback = ca;
}

}

你的 UpdateAsyncTask 完全解耦了一个特定的 Activity ,你可以在任何地方使用它(但你需要设置回调)...如果不需要,在 Activity 中使用内部类更容易

编辑:您可以在 AsyncTask 构造函数中添加一个参数以直接传递回调(更少的代码)

关于android - 确定 AsyncTask 何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553581/

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