【发布时间】:2012-03-08 19:16:19
【问题描述】:
我已经习惯了 following AsyncTask 的 doInBackground 方法上的习惯用法,以便快速插入数据库:
mDatabase.beginTransaction();
try {
//... do DB stuff
mDatabase.setTransactionSuccessful();
} finally {
mDatabase.endTransaction();
}
但是,如果我使用这个成语,我的进度对话框(放在onPreExecute 方法中)不会显示。另一方面,如果我用常规的 mDatabase.execSQL() 语句替换上面的代码,进度对话框确实会显示,但插入变得非常慢。有什么办法可以让我两全其美(即进度对话框和快速插入)。谢谢!
注意:beginTransaction 在 EXCLUSIVE 模式下运行(我不明白这意味着什么)。是这个原因吗?
【问题讨论】:
-
您的进度对话框是否显示在 PreExecute() 中并隐藏在 PostExecute() 中?
-
是的。如果我使用 SQLiteDatabase.execSQL 而不是上述成语进行插入,它工作正常。然而,这些都非常缓慢,所以我几乎坚持使用上述成语......
-
您是否尝试过在 AsyncTask 之外保留对 ProgressDialog 的引用以自己显示/隐藏它?这就是我会尝试的。