サービスは、ユーザーと対話せずに長時間実行される操作を実行したい、または他のアプリケーションが使用する機能を提供したいというアプリケーションの要望を表すアプリケーションコンポーネントです。
フラグメントは、ユーザーインターフェイスを定義せずに使用できます。バックグラウンド処理にはヘッドレスフラグメントを使用することをお勧めします。
ここでの違いは何ですか?
Service
sは、プロセスレベルでActivity
sよりも高い優先度が与えられます。メモリが少ない場合、AndroidシステムはService
sよりもActivity
sを優先するため、Service
sは長時間実行されるタスクに理想的なオプションになります。を参照してください。詳細については、 プロセスとスレッド というタイトルの記事を参照してください。
また、元の投稿で次のように述べている場合:
フラグメントは、ユーザーインターフェイスを定義せずに使用できます。バックグラウンド処理にはヘッドレスフラグメントを使用することをお勧めします。
これはどこから引用していますか?私は最初の文に同意しますが、2番目の文は一般的すぎます。実行時間の短いタスク(HTTPリクエストの実行など)の場合、ヘッドレスフラグメントは正常に機能します。ただし、長時間実行されるバックグラウンド処理(非常に大きなファイルのダウンロードなど)を実行する場合、ヘッドレスフラグメントは必要ない場合があります。たとえば、ヘッドレスフラグメントを使用して長時間実行タスクを実行し、ユーザーが「戻るボタン」をクリックした場合、これによりActivity
とそのヘッドレスFragment
の両方が破棄されます。
要約すると、サービスはActivity
から独立して存在するバックグラウンドコンポーネントです。つまり、サービスを開始したActivity
が破棄されても、バックグラウンドで実行し続けることができます。一方、ヘッドレスフラグメントには、常に親Activity
が関連付けられます。フラグメントをホストするActivity
がシステムによって破壊された場合、フラグメントも強制終了する必要があります。
一般的に言えば:
ヘッドレスフラグメントはデータをカプセル化するを意味します。ヘッドレスフラグメントは、さまざまなアプリケーションコンポーネント間で共有できるデータをカプセル化することを目的としています(UIコンポーネントとは独立して存在できるため)。
サービスは処理をカプセル化するを意味します。それらはフラグメントよりも独立しています(したがって、リソースに関してもより重いです)。それらは異なるレベルの抽象化に位置し、システム内でより長く続く可能性があります。
2つの間に重なりがあります。
ヘッドレスフラグメント-UIのないフラグメントで、基本的に大きなサイズのオブジェクトを格納するために使用されます
サービス-Androidによって開始される長時間実行タスク。アプリケーションが終了しても、サービスに優先順位を設定できます。サービスは、作業が完了しない限り停止しません。