私はslqiteデータベースを作成し、同期してアクセスし、接続のオープン/クローズの問題を回避するためのソリューションを探していましたが、この良い答えに陥りました:
ただし、このソリューションでは、データベースを明示的に閉じることはありません。これは問題ではないと多くの人が主張していますが、アプリケーションが停止した後に接続を閉じる方法を知っています。
注:前述のリンクで、回答の作成者はこれを提案しています:
私の実装では、シングルトンはアプリケーションの存続期間中存続します。したがって、明示的なデストラクタを実装しませんでした。代わりに、アプリのシャットダウン コード (またはクラッシュ ハンドラ) で、データベースが明示的に閉じられます。サンプルコードを投稿した後に ApplicationContext.onCreate() で使用した Thread.setDefaultUncaughtExceptionHandler() を参照してください。
これは良い解決策でしょうか?はいの場合、どうすれば Thread.setDefaultUncaughtExceptionHandler() を管理できますか?
編集:
また、データベース リソースが利用できない場合、必要なスレッドはデータベースが解放されるまで待機します。このコードを使用できますか? はisDbLockedByOtherThreads()
非推奨です
private myDatabase(){
final DbHelper mDbHelper =new DbHelper(ApplicationFramework.getContext());
mDB = mDbHelper.getWritableDatabase();
while(mDB.isDbLockedByCurrentThread() || mDB.isDbLockedByOtherThreads()) {
//db is locked, keep looping
}
}