gpt4 book ai didi

android - asyncTask 中的共享变量

转载 作者:行者123 更新时间:2023-11-29 21:55:21 26 4
gpt4 key购买 nike

再次,另一个关于ayncTask的问题。我在下面所做的是否正确?

Class UpdatePersonActivity{

Person person;
.
.
.
.
.

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

private ProgressDialog dialog;
private DBHandler dbHandler;


@Override
protected void onPreExecute() {

dialog = ProgressDialog.show(UpdatePersonActivity.this, "Please wait..", "working..", true);
dbHandler = new DBHandler(UpdatePersonActivity.this);
}

@Override
protected Void doInBackground(Void... params) {
dbHandler.open();
long id = dbHandler.updatePerson(person);
person.setId(id);
dbHandler.close();

return null;
}

@Override
protected void onPostExecute(Void result) {

dialog.dismiss();
Toast.makeText(UpdatePersonActivity.this, "Tenant "+person.getName()+" has been updated successfully!", Toast.LENGTH_SHORT).show();
finish();

}
}

基本上我在 Activity 类中有“person”变量,同一个变量用于插入数据库并在 DoInBackground 中更新其 ID,同一个变量用于 GUI 目的

我可以吗?我试过了并且有效,但这是我不应该做的事情吗?

谢谢

最佳答案

至于在 AsyncTask 和 UI 线程之间共享变量,唯一需要关注的是同步。如果在 doInBackground 中访问时 UI 线程(或任何其他线程)可能正在更新您的 Person 对象,那么您需要同步或以其他方式协调使用权。如果在 AsyncTask 执行期间您可以保证对共享 Person 对象的唯一访问不会修改该对象,那么您可以免除同步。

但是,您应该意识到使用 AsyncTask 作为 Activity 的内部类时的一个普遍问题。如果您的 Activity 由于任何原因重新启动(例如,用户旋转手机等配置更改),则 AsyncTask 更新的 Activity 将不再有效。描述了问题的描述和一些如何处理的建议 here .

参见 here有关此问题的更多讨论,包括在 Activity 重新启动期间为 AsyncTask 维护进度对话框的方法。

关于android - asyncTask 中的共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13355887/

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