onCreate()
いくつかの不適切な決定のために、私はSQLiteOpenHelper
クラスで最大 5 分間実行できるに行き詰まっています。ユーザーは自分の電話の電源を切るか、このプロセス中にアプリを強制終了する可能性があります。つまり、onCreate() は途中でキャンセルされます。その場合、データベースを消去してonCreate()
再実行する必要があります。これどうやってするの?
2 に答える
テーブルを作成し、別のスレッドまたはバックグラウンド スレッドonCreate()
でデータを初期化するだけです。Service
そのバックグラウンド スレッドで、データを初期化する前にオブジェクトを呼び出しbeginTransaction()
ます。SQLiteDatabase
それから電話setTransactionSuccessful()
してendTransaction()
、それが終わったら。SharedPreferences
この初期化がすでに行われているかどうかを確認できるように、フラグを保持します
トランザクションを使用する必要があります。ファイナライズすると (プロセスが完了したとき)、すべてのデータがデータベースに書き込まれます。
そうでなければ、彼らはしません。
トランザクションが何かわからない場合は、トランザクションに関するチュートリアルをご覧ください: http://www.tutorialspoint.com/sqlite/sqlite_transactions.htm
簡単に言えば、トランザクションを使用すると、すべてのデータをバーストで書き込むことができます。開始されたトランザクションのファイナライズがない場合、データは書き込まれません。
そのため、エラーが発生したり、ユーザーが強制終了した場合、トランザクションはファイナライズされず、データは書き込まれません。