3

「オンラインモード」でアプリケーションを作成しています。つまり、データがダウンロードされ、解析され、必要に応じてSQLiteデータベースに挿入されます。これはすべてサービスによって実行されます。このアプリは、サービスにデータの更新を要求するいくつかのアクティビティで構成されています(アクティビティに応じて異なるデータ)。

ユーザーが(サービスが終了するのを待たずに)アクティビティをナビゲートすると、SQLiteExceptions(メッセージ:データベースがロックされています)を簡単に取得できます。

同期ブロックを使用することを考えましたが、サービスの更新が完了するまで、ユーザーは新しいアクティビティ(ロードするにはデータベースアクセスが必要)をロードするまで待機する必要があります。行き止まりのようです。

別のオプションは、各アクティビティのonStopメソッドで更新を停止することです。もちろん、更新は中断されますが、それは大きな問題ではありません。これの問題は、私がそれにアプローチする方法がわからないということです。

私の質問は、これをどのように処理できるか/すべきかということです。

4

1 に答える 1

7

私の場合のように、あなたのアクティビティがデータベースへの書き込みではなく読み取りのみを行う場合、これは私が回避策として行ったことです:

  • サービスを作成 (つまり DatabaseService 0 し、それをデータベースにアクセスするための中心点として使用 (つまり、データベース接続を開く) して、一度に 1 つの dbhelper のみを使用できるようにします。
  • データベースにアクセスする必要があるすべてのアクティビティとサービスは、DatabaseService への接続を確立する必要があります。
  • DownloadService のスレッドのみがデータベースに書き込むことができ、トランザクションを使用する必要があることを確認してください
  • その後、 getReadable データベースを使用して、接続を読み取り/使用してダウンロード サービスを停止することができます。

1 つの dbhelper のみを使用するようにしてください。

于 2010-11-30T06:50:47.223 に答える