2016-04-01 8 views
-1

ThreadAsyncTask、またはServiceのいずれかを選択する方法はちょっと分かりません。スレッド対AsyncTask対UIとの対話のサービス

私のユースケースは、ユーザーがギターコードを練習するのに役立つカウントダウンタイマー付きのメトロノームです。私は練習をプレイして一時停止するためにいくつかのコントロールを持っており、カウントダウンタイマーはそれが変化するにつれてUIを更新する必要があります。

私の選択肢がなかったので、明らかに私は、メインスレッドにタイマーだけでなく、メトロノームコードを行うにはしたくない:

スレッド:私は、それぞれメトロノームやタイマーをプレイするために、2つのスレッドを開始;すべてのコーナーケースを処理することは本当に苦痛であり、よりよい解決策があることを知っています。 (だから私は、このオプションを破棄)

AsyncTask:それは少し良いアプローチですが、私は、画面を回転させる場合には、再度、メトロノーム、タイマーを開始します。また、AsyncTaskは長時間実行する操作にはお勧めできません。

サービス:これは長時間実行する操作のために設計されているため、この方が良い方法のようです。一方、サービスはUIと対話するために使用されるべきではありません。

サービスを使用する予定ですが、UIとのやりとりにはどのような欠点がありますか?

答えて

4

欠点は、サービスがそれを利用しているアクティビティに通信する方法を見つけなければならないことです。サービスはUIと直接やりとりすることはできません。

通常、人々はサービスとアクティビティ間の通信にイベントバスを使用します。