4

Android Architecture Tutorial: Developing an App with a Background Service (using IPC) を読みました。基本的には

  1. 別のプロセスでサービスを実行します。
  2. サービスで繰り返しタイマーイベントが発生します。
  3. タイマー イベント ハンドラー内で、ネットワークを実行してツイートを取得し、それに接続されているすべてのリスナーに通知します。リスナーは、IPC を介して接続されます。

このアプローチには 2 つの大きな特徴があることがわかります。

  1. 別のプロセス内で実行されるツイート取得アクション。
  2. メインアクティビティが終了しても、常に実行されます。

ただし、「常に実行する」ことは私の要件ではありません。メインのアクティビティを終了すると、すべてが停止します。

  1. メイン アクティビティ内でAsyncTask(または)を使用して、ツイート取得アクションを実行した方がよいでしょうか? Timerすべてが単一のプロセス内で実行されます。もう使用しませんService
  2. AsyncTask (またはタイマー) を使用すると、より簡単に見えます。IPC に対処する必要はもうありません。
  3. または、Serviceアプローチを使用する方が良いでしょうか?サービスが提供する特典が不足していますか?
4

4 に答える 4

1

最初は、サービスがスレッドではないことを知っておく必要があります。アクティビティがサービスをバインドし、デーモンとして実行されているが、ASynchTaskが別のスレッドである場合。

ASynchTaskは、UIスレッドで実行されるべきではないいくつかの作業を実行するために設計されています(たとえば、いくつかのより大きな計算を処理する)

サービスは、バックグラウンドで永続的に実行されるように設計されています。アクティビティが停止または一時停止されている場合でも、新しいツイートを永続的にチェックする場合は、新しいデータを自分のスレッドにチェックインするサービスを使用する必要があります。

TimerTaskは、独自のスレッドで実行される古き良きJavaスタイルの実装です。一部のデータの処理に使用できますが、UIの操作に問題があります。適切な「AndroidWay」で使用したい場合は、TimerTaskの代わりにHandlerを使用してください。

于 2012-12-19T15:02:17.040 に答える
1

サービスを使用すると、アプリケーション フローから独立してポーリングを実行できるため、より良い方法です。

これはユーザーの操作を必要とせず、アプリケーションのメイン UI やユーザーの操作を妨げることなくバックグラウンドで実行する必要があるタスクであるため、サービスはその実装の理想的な候補です。

メインアプリケーションが終了するとサービスもオフになるように、サービスをアプリケーションにバインドすることができます。

于 2012-12-19T14:58:00.667 に答える
1

TimerTask特定の間隔で実行および繰り返すように設定できTimer、別のスレッドで実行されるため、UI を乱すことなくすべての作業がバックグラウンドで行われるという見方をします。完了時にアプリ内で更新をトリガーし、TimerTask必要に応じて UI を更新するのは簡単です。

アプリを終了するときは、 を呼び出しcancel()て を使用しTimerてすべてのタスクをパージする単純なケースですpurge()

素晴らしく簡単で、IPC を実装する必要はありません。これを正しく行うのは非常に面倒です。

編集

You を使用しAsyncTaskてもほぼ同じことができますが、次の実行を手動でスケジュールする必要があります。過去に両方のソリューションを使用しましたが、どちらも同じようにうまく機能することがわかったので、すべてあなたの好み次第です.

于 2012-12-19T15:03:41.690 に答える
0

まず第一に、私はあなたがフォローしているチュートリアルを知っています...私は IPC を学ぼうとしている間、そのチュートリアルを自分でフォローしました。知っておく必要があることの 1 つは、Android のドキュメントで明示的に次のように述べられていることです。

注: AIDL の使用は、異なるアプリケーションからのクライアントが IPC のためにサービスにアクセスできるようにし、サービスでマルチスレッドを処理する場合にのみ必要です。

可能であれば、サービスにバインドする必要があります。

また、サービスが本当に必要かどうかを検討する必要があります。Android の Twitter アプリは、必要に応じてツイートを更新することさえしないことを考慮してください。ポーリングはバッテリーを大量に消費する可能性があるため、これが本当に必要かどうかを検討する必要があります。

また、複数の活動からのこれらのツイートを使用しますか? もしそうなら、コードを複数の場所で複製しない方がいいでしょう。したがって、この場合、サービスが必要になる場合があります。

それ以外は、単純な (更新するタイマー付きの非同期タスク) から始めて、必要に応じてサービスに移行することをお勧めします。

于 2012-12-19T15:21:25.260 に答える