0

そのため、他の多くのそのような質問を検討した後、必要なすべてのアクティビティで、アプリ全体で SqlLiteDataHandler の 1 つのインスタンスを使用することにしました。

スプラッシュ画面が読み込まれると、SqlLiteDataHandler の public Static インスタンスが作成されます。

その後、そのハンドラーをどこでも使用しますが、アプリを閉じるとアプリの参照が失われることを理解しているため、ハンドラーを閉じたり null にしたりすることはありません。

しかし、問題はまだ解決していません。アプリから何度も出入りしようとすると、データベースがロックされた問題が発生します。(したがって、スプラッシュ画面を複数回通過します。)

どこが間違っていますか?

私のインスタンスの作成は次のように簡単です。

DbStaticClass.sqlDataHandler = new LinkDataHandler(SplashScreen.this);

アプリ全体で DbStaticClass.sqlDataHandler を使用します。

4

1 に答える 1

1

LinkDataHandlerスプラッシュ スクリーンを使用しない、またはスプラッシュ スクリーンを複数回呼び出す実行パスが複数あるため、スプラッシュ スクリーンから作成しないでください。いくつか例を示します。

  • Android は、メモリ不足のためにバックグラウンドにあるアプリケーションを強制終了し、ユーザーがアプリケーションにActivity戻ったときに表示されるものだけを再作成します。
  • Service最初にスプラッシュ画面に入らずに開始しました
  • あなたのアプリケーションは外部を処理しますIntent
  • Servicesまたは、ユーザーがスプラッシュ画面からアプリケーションに再度アクセスした場合、アプリケーションが再起動されず、アプリケーションが複数回実行される可能性があります。

あなたのアプリケーションでは最後のものは当てはまらないかもしれませんが、最初のものをエスケープすることはできません。複数sqlDataHandlersの接続が作成されているため、データベースへの複数の接続が開かれており、複数の理由で衝突する可能性があります。

アプリケーションコンテキストに基づいてシングルトンを適切に実装するには、別の回答で説明されているようにApplicationクラスとそのを使用します。onCreate


この回答は、次の仮定に基づいています。

  • DbStaticClass.sqlDataHandlerActivityonCreateメソッドでのみ初期化されます( SplashScreen)
  • DbStaticClass.sqlDataHandlerの外にアクセスしますSplashScreen
  • LinkDataHandlerデータベースハンドラーを作成します。
于 2013-09-05T16:55:01.560 に答える