2012-02-10 17 views
0

私はいくつかのエンティティ(すべて同じタイプ)に関する情報を表示するListViewを持っています。すべてのエンティティは状態を持ち、ListItemの見た目が異なることがあります。さらに、ListItemをクリックすると、エンティティの状態に応じて特定の操作が実行されます。Androidサービス:サービスが開始されるまでUIで開始されたイベント/タスクをキューに入れますか?

状態Aにあるエンティティは、それを使用して何らかの操作を行うサービスに渡す必要があります。

サービスは、必要なときにのみ開始する必要があります。したがって、ユーザーがListItemをクリックすると、サービスが開始され、エンティティがそれに渡されます。その後、サービスは何らかの操作を行い、エンティティの状態が変化します。これにより、エンティティが属するListItemの外観が変更されます。

  • シンプル場合:サービスがすでに開始してのListItemの ユーザーがクリックするエンティティを渡すservicemethodが 直接呼び出すことができますときにバインドされています。
  • 難しい場合:サービスが開始されておらず、ユーザーが ListItemをクリックしています。

第2のケースを処理する最良の方法は何ですか?エンティティをキューに保存し、サービスが開始されるのを待ってキューを渡すか、よりエレガントな方法がありますか? サービスが開始される前にユーザーが複数のListItemをクリックしている可能性があります。

これを避けるために、サービスを常にバックグラウンドで実行しておくことをお勧めしますか?次に、サービスのバインディングが十分速いので、ユーザーがListItemをクリックした場合、そのサービスへの参照がすでにバインドされているかどうかが問題です。

ありがとうございます!

答えて

0

beefyはServiceです。あなたがListViewを含んでいるActivityが動作している間に、それがバックグラウンドスレッドで常時実行されていない場合は、最も敏感で効果的な方法はServiceへのバインディングを維持することです。そうすれば、あなたは「困難なケース」を持っていません。覚えておいてください:ユーザーがフォアグラウンドでアプリケーションを積極的に使用している間は、明らかにデバイスのリソースを使用したいものです。

はいえ、善良な市民て、そしてonPause()上のサービスをアンバインドし、必要に応じてServiceを殺すことができるようにonResume()に再バインドします。私は確かに、それはいつでも殺される可能性がありますが、責任あるAndroid市民の一員です。

Serviceエンティティデフォルトでは、がすべてメインスレッドで処理されることを忘れないでください。 Serviceが、あなたが話しているonClick()処理で重労働を実行している場合は、別のスレッドで動作させるか、別のプロセスをマニフェストに入れたいと思っています。

関連する問題