バウンドサービス in Android開発者のウェブサイト。サービスを十分に理解していると思いましたが、使用してサービスを接続する別の方法を見つけました Messenger
特にローカルサービスのクラス。そこで混乱し、コンセプトが間違っているかもしれません。
Android Service
。の私の理解は次のとおりです。
混乱はリストの最初の項目であり、背景の定義です。バックグラウンドはスレッドまたはプロセスではありませんか?メインスレッドで実行できるとは思っていませんでした。
開発ページのサービスに関する注意事項は次のとおりです。
Caution:サービスはホスティングプロセスのメインスレッドで実行されます。サービスは独自のスレッドを作成せず、別のプロセスで実行されません(ただし、別に指定します)。つまり、サービスでCPUを集中的に使用する作業やブロッキング操作(MP3再生やネットワークなど)を行う場合、その作業を行うにはサービス内に新しいスレッドを作成する必要があります。個別のスレッドを使用することにより、アプリケーションが応答しない(ANR)エラーのリスクを軽減し、アプリケーションのメインスレッドをユーザーのアクティビティとの対話専用にすることができます。
ご質問
アプリケーションのメインスレッドは、常にUIスレッドではありません。たとえば、Activity
が停止すると、onStop()
が呼び出されるため、UIスレッドはそのActivity
から削除され、同じまたは別のアクティビティ内に移動します。応用。ただし、アプリケーションがアクティブでなくなるわけではなく、OSまたはユーザーによって閉じられるまでバックグラウンドで動作し続けることができます。次に、誰がバックグラウンドで実行し続けますか?これはメインスレッドであり、UIスレッドではありません。
サービスとは
Androidでは、サービスはUIスレッドのバックグラウンドで長時間実行される操作を実行できるアプリケーションコンポーネントです。バックグラウンドでは、ユーザーインターフェースがないことを意味します。サービスはデフォルトで呼び出し側コンポーネントのプロセスのメインスレッドで実行されるため(応答性が低下し、ANRが発生する可能性があります)、新しいスレッドを作成して長時間実行する必要があります。サービスを完全に異なるプロセスで実行することもできます。
アクティビティコンポーネントとは異なり、サービスにはグラフィカルインターフェイスがありません。また、ブロードキャストレシーバーはブロードキャストメッセージ(ブロードキャスト、マルチキャスト、ユニキャスト)を受信し、短いタスクを実行しますが、サービスは音楽のストリーミング、ネットワークトランザクション、ファイルI/O、データベースとの対話などの長時間の処理を行うことを目的としています。アクティビティなどのアプリケーションコンポーネントによってバックグラウンドで実行され、ユーザーが別のアプリケーションに切り替えたり、開始コンポーネント自体が破棄されても実行され続けます
サービスを使用する理由
サービスには他のバックグラウンドプロセスよりも高い優先順位が与えられているため、Androidがサービスを終了する可能性は低くなります。十分なリソースが再び利用可能になったら再起動するように設定できますフォアグラウンドアクティビティと同じ優先度を割り当てることは間違いなく可能です。その場合、目に見える通知をアクティブにする必要があります(通常、音楽を再生するサービスで使用されます)。
自分でスレッドを管理したくない場合は、IntentService
を使用します。それ以外の場合は、AsyncTasks
を使用します。