3

ストック カレンダー アプリのソース コードを見ると、Google は IntentService を使用してデータベースのコンテンツ プロバイダー操作を行っています。AsyncQueryHandler ではなく IntentService を使用する利点はありますか?

Handler は UI に関連付けられているため、アクティビティが一時停止または停止すると、Handler も一時停止されると思いました。しかし、これは当てはまらないようです。単純なコンテンツ プロバイダーと AsyncQueryHandler を作成しましたが、これらは長い for ループを実行するだけです。他のアプリを起動したり、アクティビティを強制終了したりしても、for ループは引き続き実行されます。

では、非同期 CRUD 操作に IntentService を使用する利点は、(サービスである) サービスが強制終了される可能性が少ないということですか?

更新: 私の混乱の一部は、ハンドラーがアクティビティのライフサイクルにどのように関係しているかです。私の実験から、それは独立しているようです。

また、ストック カレンダー アプリのソース コードに慣れていない方のために説明すると、CRUD を実行する方法は、ハンドラーへの参照と共に操作をキューに追加することです。次に、キューをポップして CRUD を実行するインテント サービスを開始します。完了すると、Message.sendToTarget() を介してハンドラーを呼び出します。

では、その余分な複雑さによって何が得られるのでしょうか?

4

1 に答える 1

0

私は同じ混乱で立ち往生しています。私が見つけたのは、アクティビティで IntentService が殺されることです。これは、向きが変わると強制終了されることも意味します。AsyncQueryHandler は実行を続けますが(ご存知のとおり)。私のユースケースでは、データベースが更新されるのを待たずに、最初に UI を更新しています。だから私は AsyncQueryHandler を選ぶつもりだと思います。

Intent Service についてはよくわかりませんが (使用したことはありません)、メッセージを送信しているため、データベースから何かを UI スレッドに表示する必要がある場合に役立つ可能性があります。データベースがいつ更新されたかがわかります。

于 2013-03-06T10:35:08.393 に答える