我有一个异步类,它打开一个 sqlite 数据库,如果是第一次运行数据库,将填充大约需要 10 秒才能完成的数据。即使后台仍在进行工作,异步任务也会立即完成。我认为这与 sqlite 的 oncreate 方法有关,可能会执行另一个异步任务或其他事情
class BuildDatabase extends AsyncTask<Void, Void, Void> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
loading = ProgressDialog.show(ctx, "Please wait...", "Building database, this may take a few seconds", true);
}
@Override
protected Void doInBackground(Void... params) {
// open up the database, if its the first time running the data will
// be populated
db = new SQLiteWrapper(ctx); //takes 1-10 seconds
return null;
}
@Override
protected void onPostExecute(Void result) {
Log.d(TAG,"post execute");
loading.dismiss();
}
}
sqlite helper 类的主要方法如下所示
public class SQLiteWrapper extends SQLiteOpenHelper {
public SQLiteWrapper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
ctx = context;
}
@SuppressWarnings("deprecation")
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
// populate our database with data from the zones file
try {
database.setLockingEnabled(false);
buildDatabase(database);
}
finally {
database.setLockingEnabled(true);
}
}
}
如果你熟悉这个类 onCreate 只被调用并且数据库不存在。如果我在数据库构造函数中手动调用 onCreate(),则会显示进度对话框。想法?