サービスと放送受信機の違いは何ですか?


14

私はサービス放送受信機について聞いています。それらの違いは何ですか?また、私の観点から見ると、Androidスマートフォンの操作にどのように影響しますか?


TCPレイヤーにポートを作成する代わりに、バッテリーと大量の処理を節約するために、常にブロードキャストレシーバーを作成します。Androidで何らかのイベントが発生すると、...そのイベントのブロードキャストレシーバーが書き込まれると、自動的に呼び出されます。技術的に起こった出来事は、Androidの観点から意思と呼ばれている
ラーフルライナ

回答:


27

Androidアプリケーションには3種類のコンポーネントがあります。一般に、ユーザーはそれらについて知る必要はありません。アプリ作成者が特定の動作をアプリにプログラムする方法です。ただし、タスクマネージャーなどでアプリの動作を注意深く監視している場合、またはTaskerなどのアプリで物事を自動化している場合は、システム内でそれらがどのように組み合わされるかを理解しておくと役立ちます。

活動は、コンポーネントの最も身近なタイプです:フルスクリーンやダイアログのサイズのいずれか:それはあなたが見ることができるウィンドウです。アクティビティは、画面に表示されている間のみ実行されます。アクティビティを終了すると、Androidはそのアプリをメモリ内に保持して再度起動できるようにしますが、アクティビティは実行されず、バッテリーやネットワークを使用しません。アプリはインテントを使用してアクティビティを開始します。インテントは、開始するアクティビティを明示的に指定することも、実行するアクション(特定のファイルを開くなど)を指定することもできます。複数のアクティビティがインテントを「処理」できる場合、いずれかを選択するように求めるダイアログが表示されます。

サービスは、別のアプリケーション・コンポーネントです。別のコンポーネント(アクティビティ、または別のサービス)がサービスを開始すると、停止するまでバックグラウンドで実行されます。つまり、サービスは、画面に何も表示せずに、携帯電話をスリープ状態に保つ(スリープ解除ロックを使用する)、バッテリーを使い切る、または大量のネットワークデータを使用することができます。

アプリはサービスを使用して、サーバーからのファイルのダウンロード、メールの確認、場所の確認など、バックグラウンドで長時間実行されるプロセスを実行できます。サービスは表示されず、ユーザーと直接やり取りすることもできませんが、「実行中のアプリ」リストには表示されます。設定アプリから、アプリまたはアプリケーションマネージャーを選択し、実行中を選択します。その方法でサービスを停止できますが、通常は必要ありません。サービスは直接表示されないため、Androidはアクティビティよりもサービスの重要性が低いと見なします。そのため、携帯電話でメモリがさらに必要になったときに最初に削除されます。

ブロードキャストレシーバーは、3番目の種類のコンポーネントです。サービスと同様に、それらはバックグラウンドでのみ存在し、直接あなたと対話しません。ただし、サービスとは異なり、実行したままにしたり、長いタスクを実行したりすることはできません。イベントに応答するために存在します。また、アクティビティやサービスとは異なり、複数の放送受信機を一度に起動できます。

コンポーネントは1つのアプリにインテントをブロードキャストしますが、特定のアプリを指定せずに頻繁に配信します。この場合、インテントは通常、バッテリーが少なくなっているなど、発生したイベントを表します。システムは、(インテントフィルターを使用して)関心を登録したすべてのブロードキャストレシーバーを見つけ、それぞれを順番に実行します。各ブロードキャストレシーバーは、通知を作成するなどしてすぐに反応したり、サービスやアクティビティを開始してさらにアクションを起こすことができます。ブロードキャストレシーバーがイベントを処理するとすぐに停止され、別の同様のイベントがブロードキャストされるまで再び実行されません。

3つのコンポーネントすべてが連携して動作する例として、Google Playからアプリをダウンロードする場合があります。まず、Google Playアクティビティは、ダウンロードするコンテンツを選択するための視覚的なインターフェースを提供します。アプリのリストは1つのアクティビティになります。「インストール」ボタンをクリックすると、別のアクティビティが開始され、確認または支払いダイアログが表示されます。確認すると、ダイアログアクティビティがサービスを開始します。サービスは、アクティビティが終了して実行されなくなっても、コンテンツのダウンロードを継続します。

ただし、新しいアプリのダウンロード中に電話がインターネットに接続できなくなる可能性があります。これが発生した場合、Google Playのダウンロードサービスはブロードキャストレシーバーを登録し、ネットワーク接続の変更に関心があることを示すインテントフィルターを使用して、サービスを停止します。電話がインターネットに接続すると、システムはイベントをブロードキャストします。Androidは、Google Playサービスが登録したブロードキャストレシーバーと、そのイベントを待機している他のブロードキャストレシーバーを起動します。この場合、ブロードキャストレシーバーはダウンロードサービスを再度開始します。このサービスは、ダウンロードの進行に合わせて通知を作成し、終了すると、独自のブロードキャストを送信して、新しいパッケージがインストールされたことを他のアプリに通知し、その後停止します。これにより、他のアプリからのブロードキャストレシーバーが起動し、

要約すれば:-

  • アクティビティは画面上のウィンドウを表します。サービスは、長時間実行される可能性のあるバックグラウンドタスクを実行します。ブロードキャストレシーバーは、イベントを処理するために短時間実行されます。
  • 3つともインテントを使用して開始されますが、異なるメカニズムを使用します。起動アプリは、起動するコンポーネントのタイプを明示的に指定する必要があります(それぞれの場合に異なるメソッドを呼び出すことにより)。
  • アプリがインテントを使用してアクティビティを開始すると、1つのアクティビティ(「...を使用してアクションを完了する」ダイアログが表示される可能性があります)のみが開始されます。おそらく異なるアプリからの受信者。
  • ユーザーとして、アクティビティと直接やり取りします。サービスとはやり取りしませんが、電話の速度が遅くなり、リソースを消費する可能性があります。ブロードキャストレシーバーと対話することはありません。また、ブロードキャストレシーバーは短命であるため、それらの管理について心配する必要はありません。

非常に便利な答え。確認したいのは、ユーザーが無効にしたアプリはどうなるかということです。Androidは、登録されている目的のためにブロードキャストレシーバーを起動しますか?または、それらの無効なアプリはバックグラウンドでサービスを実行できますか?無効なアプリの場合、再起動後も強制停止ボタンがグレー表示されないのはなぜですか?彼らの活動を開始できないことは私には明らかです。
消防士

@Firelord新しい質問がある場合は、新しい質問として投稿する必要があります。コメントは詳細な回答を許可せず、他の訪問者が質問を見つけられないようにします。
ダン・ヒューム

素晴らしい投稿ですが、実際には4つのコンポーネントがあります。コンテンツプロバイダーがありません。
アレクサンドルマーティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.