3

ユーザーがsqliteDBをクエリできるようにするアプリケーションがあります。アプリが起動すると、URLをダウンロードして、バックグラウンドスレッドにデータベースの更新があるかどうかを確認します。

残念ながら、これにより、ユーザーが更新の実行中にデータベースにクエリを実行しようとする関数を選択すると、ロックが発生します。

私の質問は2つあります。

  1. このシナリオで競合を回避するための最良の戦略は何ですか。

    • データベースを別のファイルにコピーして更新し、コピーして戻します
    • ある種のシングルトンを操作し、それを使用してキュー内の操作をスケジュールします。
    • ループしてロックが開くのを待ちます(ただし、ユーザーを抑えたくありません)
  2. アプリが終了する直前までバックグラウンドスレッドを一時停止し、アプリケーションが終了する直前に更新を実行することは可能ですか?

誰かアドバイスがあれば、ユーザーがアプリの使用を停止せずにアップデートを実行する必要があるので、感謝します。

4

2 に答える 2

0

あなたの質問に答えるために、私は#1ポイント3がiPhoneのあなたの特定の問題に対する最良の解決策であると信じています。バックグラウンド処理を行うために別のスレッドを開始することができないので、少し待つこと(ほとんどのプログラムが最初に持っている)は標準的なアクションです。

アプリケーションの終了時に更新がプッシュされるメソッドを実装しようとはしません。他の何かに移りたいだけなのに、アプリケーションの実行を(私自身も含めて)停止することが何度もあります。

IMOは、プログラムの開始を待つ(できれば長すぎない)ことが、この問題の最善の解決策です。

于 2010-11-04T18:51:58.540 に答える
0

明確にしてください-URLのダウンロードはおそらくはるかに長い操作になる可能性がありますが、データベースクエリは非常に短くて迅速な機能である必要があるようです。URLのダウンロード操作全体でデータベースロックを保持していますか?もしそうなら、URLのダウンロードを1つの操作として実行し、すべてのデータを受信したらすぐにデータベースに適用して、URLのダウンロード中にデータベースを保持しないようにしたいと思います。

于 2010-11-04T18:55:16.453 に答える