Android:如果失败则重新运行数据库 onCreate()

Android: Rerun Database onCreate() if it fails

由于一些错误的决定,我的 SQLiteOpenHelper class 中的 onCreate() 卡住了,最多可以 运行 5 分钟。用户可以在此过程中关闭他的 phone,或强行关闭应用程序,这意味着我的 onCreate() 将被提前取消。如果是这样的话——我需要擦除数据库并onCreate()重新运行。我该怎么做?

只需在 onCreate() 中创建表并在另一个 Service 或后台线程中初始化数据。

在该后台线程中,在初始化数据之前对 SQLiteDatabase 对象调用 beginTransaction()。然后在完成后调用 setTransactionSuccessful()endTransaction()。 在 SharedPreferences 中保留一个标志,以便您可以检查此初始化是否已经发生

您应该使用交易。如果你完成它(当这个过程完成时),所有的数据都会被写入数据库。
否则,他们不会。

如果你不知道什么是交易,这里有一个关于交易的教程:http://www.tutorialspoint.com/sqlite/sqlite_transactions.htm

简而言之,一个事务可以让你一次写入所有数据;如果开始的事务没有完成,则不会写入数据。

因此,如果发生任何错误或您的用户强行关闭,交易将不会完成,也不会写入任何数据。