私は 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 ヘルパー クラスのメイン メソッドは次のようになります。
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() を手動で呼び出すと、進行状況ダイアログが表示されます。考え?