2010-12-30 10 views
0

私は、ユーザーがボタンをクリックしたときにオブジェクトを観察する必要があるという要件があります。ユーザーがそのボタンを再度クリックすると、観察は停止します。Android; Observableオブジェクトを購読/購読解除するためのサービスを使用するのは良い考えですか?

私の最初の考えは、レイアウトファイル内のonClick="myMethod"を使用して、ボタンをアクティビティ内のメソッドにバインドすることです。

このメソッドを呼び出すと、startService()が呼び出され、オブジェクトの監視が開始されます。これにより、オブザーバーとしてサービスを登録することになります。

ボタンをもう一度クリックすると、サービスがオブザーバとして登録解除されるstopService()メソッドが呼び出されます。

私はサービスを利用することを考えています。その後のアクションはUIスレッドから取り除かれます。これは合理的なアプローチですか、これを簡単に行うことができるAndroid SDKには何かがありますか?

答えて

0

私はサービスを使用することを考えています。その後のアクションはUIスレッドから取り除かれます。

あなた自身のスレッドをフォークし、「観測」が代替スレッドをサポートしている場合のみ。サービスはUIの観点から「バックグラウンド」にあります(画面に直接描画しません)が、デフォルトではスレッドの観点からは「バックグラウンド」にはありません。

これは合理的なアプローチですかこれを簡単に行うことができますAndroidのSDKで何かがあるのでしょうか?

あなたが上に書いたことを考えれば、それは不可能です。ボタンが重要だと思われるようです - おそらくそうではありません。おそらく重要なことは、この「対象」があなたが「観察」していることです...そしてあなたはそれが何であるかを言わなかったことです。

あなたのサービスが確実にstopService()に自分自身を登録解除する場合は、あなたがこのアプローチには、ガベージコレクションの問題に実行しないでください。しかし、オブザーバ/観測可能なパターンに関するスレッディングは、通常、オブザーバブル - この場合、不可解な「オブジェクト」の責任です。

+0

こんにちはマーク、オブジェクトはPOJO(文字列のカップル、日付など)になります。このオブジェクトはサードパーティのAPIから更新されます。私はサービスを利用して、そのオブジェクトの監視を「開始」および「停止」するソリューションを見つけようとしています。ユーザは、観測からの出力を見るので、アクティビティをナビゲートしません(または、アクティビティから移動すべきではありません)。 – Jimmy

+0

@ James.Elsey: "オブジェクトはPOJOになります" - POJOは孤立して存在しません。一部のAndroidコンポーネント(サービスなど)は、そのコンポーネントを所有する必要があります。 – CommonsWare

0

私はマーフィーに同意しかし、小さな点、私はあなたを与えるべきだと思います:アクティビティが破壊されたときに 1.あなたは何をしていますか?一時停止? uが観察されているオブジェクトを使用すると、オブザーバオブジェクトが活動して死亡した場合、あなたは、すべての状況で彼らに何が起こるかを考える必要が観察する必要があるイベントが発生した場合 2.、私はuが非同期タスクや地元の糸でオフに優れていると思いますどのような場合でも、アクティビティonDestroyでも監視対象オブジェクトをGCしたり、サービスを終了したりするために、アクティビティがサービス内で破棄されたことを検出する必要があります。

関連する問題