1

私は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
        }
    }
4

1 に答える 1