4

Android アプリケーションで 3 つのサービスを使用しました。

第 1 サービス: 放送受信機を聞く。

2 番目: このサービスでは、フォアグラウンド アプリケーションの詳細を取得するために毎秒実行される Runnable を使用しました。

3: データをサーバーにアップロードします。

ここで、上記のアプリケーションの機能を持つライブラリ プロジェクトを開発する必要があります。

ライブラリ プロジェクトで使用されるすべてのサービスまたはレシーバーは、クライアント アプリケーションのマニフェスト ファイルで宣言する必要があります。ここに私の質問があります:

  1. サービス定義をマニフェスト ファイルに宣言する問題をスキップできるように、サービスの代わりにスレッドを使用できますか?? ただし、ブロードキャスト リスナーを実装するには、1 つのサービスを使用する必要があります。

  2. アプリケーションで使用されるサービスの数は、アプリケーションの効率に影響しますか?? なぜなら、クライアントのアプリケーションには 1 つまたは 2 つのサービスがある可能性があるからです。彼らが私のライブラリを含めたい場合、サービスの数は 4 または 5 に増えます。これは明確な問題です。

  3. ライフサイクルがアプリケーションのプロセスに依存するスレッドを使用すると、メモリがないとスレッドが強制終了されるという問題が発生しますか?? サービスが強制終了された場合、サービスは再起動されますが、スレッドを使用している場合にこの問題が発生する方法がわかりません。

4

2 に答える 2

1

1-スレッドとサービスは、さまざまなタイプの操作を対象としています。たとえば、フォアグラウンド サービスはオーディオ/ビデオをストリーミングするためのもので、ThreadPool は大量の画像をダウンロードして画像ビュー (UniversalImageLoader、Volley) に表示するために使用されます。古典的なスレッドとハンドラーを好むでしょう。

2- 1 つのアプリケーションで複数のサービスを使用できますが、パフォーマンスには影響しません。もちろん、それはコードの品質と、サービスが相互に対話する方法に依存します。たとえば、私のアプリケーションの 1 つで、ダウンロード用のサービス、接続用のサービス、ライブ オーディオとオーディオ ファイルのストリーミング用のサービス、およびこれら 2 つの管理用のサービスを使用しています。それで、インテントとブロードキャストレシーバーを使用します。遅れはありません。

3- アプリケーションが強制終了されると、バックグラウンド サービスも強制終了されます。たとえば、 onDestroy() でスレッドをきれいに終了するか、キルインテントをリッスンできるブロードキャストレシーバーを使用するかはあなた次第です。

于 2013-09-25T07:56:19.620 に答える
0

スレッドは、サービスよりもはるかに単純です。実際には、スレッドと通信するのは複雑な作業ですが、サービスの場合は単純にスレッドにバインドし、そのメソッドを定期的に呼び出します。さらに、スレッドには Context インスタンスがないため、Android の機能が非常に制限されます。

メインスレッドがフリーズしないように、時間のかかる小さなコンパクトなタスクにはスレッドを使用することをお勧めします。AsyncTask - 結果を取得するためのより簡単な方法で、より複雑でパラメータ化されたタスク用 (一方、スレッドはハンドラーを使用して UI スレッドにポストする必要があります)。最後に、サービス - バックグラウンドで実行され、Android 自体が所有するため、ライフサイクルが他のオブジェクトに依存してはならない長期タスク用です。したがって、多くのアクティビティやアプリケーションでさえ、同じサービスを共有して使用できます。

サービスを使用することをお勧めします。あなたが説明した 3 つのサービスがアプリのパフォーマンスに大きな影響を与えるとは思いません。

于 2013-09-25T07:38:28.540 に答える