web-dev-qa-db-ja.com

ヘッドレスフラグメントとAndroidのサービスの違いは何ですか?

サービス

サービスは、ユーザーと対話せずに長時間実行される操作を実行したい、または他のアプリケーションが使用する機能を提供したいというアプリケーションの要望を表すアプリケーションコンポーネントです。

ヘッドレスフラグメント

フラグメントは、ユーザーインターフェイスを定義せずに使用できます。バックグラウンド処理にはヘッドレスフラグメントを使用することをお勧めします。

ここでの違いは何ですか?

22
Yesha

Servicesは、プロセスレベルでActivitysよりも高い優先度が与えられます。メモリが少ない場合、AndroidシステムはServicesよりもActivitysを優先するため、Servicesは長時間実行されるタスクに理想的なオプションになります。を参照してください。詳細については、 プロセスとスレッド というタイトルの記事を参照してください。

また、元の投稿で次のように述べている場合:

フラグメントは、ユーザーインターフェイスを定義せずに使用できます。バックグラウンド処理にはヘッドレスフラグメントを使用することをお勧めします。

これはどこから引用していますか?私は最初の文に同意しますが、2番目の文は一般的すぎます。実行時間の短いタスク(HTTPリクエストの実行など)の場合、ヘッドレスフラグメントは正常に機能します。ただし、長時間実行されるバックグラウンド処理(非常に大きなファイルのダウンロードなど)を実行する場合、ヘッドレスフラグメントは必要ない場合があります。たとえば、ヘッドレスフラグメントを使用して長時間実行タスクを実行し、ユーザーが「戻るボタン」をクリックした場合、これによりActivityとそのヘッドレスFragmentの両方が破棄されます。

要約すると、サービスはActivityから独立して存在するバックグラウンドコンポーネントです。つまり、サービスを開始したActivityが破棄されても、バックグラウンドで実行し続けることができます。一方、ヘッドレスフラグメントには、常に親Activityが関連付けられます。フラグメントをホストするActivityがシステムによって破壊された場合、フラグメントも強制終了する必要があります。

44
Alex Lockwood

一般的に言えば

ヘッドレスフラグメントデータをカプセル化するを意味します。ヘッドレスフラグメントは、さまざまなアプリケーションコンポーネント間で共有できるデータをカプセル化することを目的としています(UIコンポーネントとは独立して存在できるため)。

サービス処理をカプセル化するを意味します。それらはフラグメントよりも独立しています(したがって、リソースに関してもより重いです)。それらは異なるレベルの抽象化に位置し、システム内でより長く続く可能性があります。

2つの間に重なりがあります。

32
blueberryfields

ヘッドレスフラグメント-UIのない​​フラグメントで、基本的に大きなサイズのオブジェクトを格納するために使用されます


サービス-Androidによって開始される長時間実行タスク。アプリケーションが終了しても、サービスに優先順位を設定できます。サービスは、作業が完了しない限り停止しません。

1
Mahesh