5

これはかなり古い質問ですが、率直に言って、私の好奇心を満たす方法で答えられるとはまだわかりません。

親愛なる読者の皆さんの前に、Android開発者向けリファレンスにジャンプしてテキストを貼り付けてください。私はすでにインテント/保留中のインテントのドキュメントを読んでおり、混乱をまだ解決していないことに注意してください。

インテントモデルはAndroidシステムのコアであり、非常に一般的であることに気づきました。このため、私が見たその使用法の例は多く、多様である傾向があります。このバリエーションは、私が学ぼうとしている概念を曖昧にし、それは苛立たしいものです。

私の質問は単純に書かれていますが、簡単な言葉で説明するのはおそらく難しいでしょう。私は、意図が他の活動へのメッセージであり、他の活動がマニフェストへの関心を宣言できることを理解しています。保留中のインテント、インテントのラッパーは、私を混乱させます。

  1. 権限とトークンに関するドキュメントが表示されます。私はそれを理解していますが、なぜ保留中の意図が別のエンティティとして必要なのですか?それはどのような動作を可能にしますか?
  2. 保留中のインテントはどのようなアクティビティ/タスクのライフサイクル動作を引き起こしますか?
  3. 放送受信機はいつ必要ですか?
  4. 放送受信機の制限は何ですか?

私はこれらが真剣に新しい質問であることを認識しています(私はそうです)が、私はこれらのコアコンセプトを必死に理解したいので、例/ガイド/公式ドキュメントにそれほど依存する必要はありません。

フィードバックは大歓迎です。ありがとう。

4

1 に答える 1

3

PendingIntent の主な目的は、別のアプリケーションに、ユーザーの代わりに何かを行う許可を書面で与えることです。アプリケーションが実行できることは、基本的に次の 2 つの要因によって制限されます。

  • 可視性。一般に公開されている (または任意の) インテント フィルターが提供されていないサービスやアクティビティなどのコンポーネントは、他のアプリケーションから呼び出すことはできません。それらは、パッケージとクラス名を指定する明示的なインテントを使用して、アプリケーションによってのみ呼び出すことができます。
  • 権限。各アプリケーションは、一定量のアクセス許可を要求できます。これらはほとんど事前定義されたアクセス許可ですが、独自のアクセス許可を定義するオプションもありますが、私はそれを使用したことはありません. アプリケーションは、これらの権限を超えることはできません。

現在、保留中のインテントを使用すると、何かを実行するために必要なアクセス許可と可視性を持つアプリケーションが、代わりにそれを行うことを明確に許可している場合、これらの両方の制限を乗り越えることができます。アプリケーションは、たとえば、そのアクティビティの明示的なインテントを含む保留中のインテントを提供する場合、彼女のプライベート アクティビティの 1 つを呼び出すことができます。

[編集] たとえば、アラームマネージャで使用されます。(保留中の) インテントを与えることで、何をいつ行うべきかをアラーム マネージャーに伝えます。あなたのアプリケーションはおそらく時間になったときにそこにはもう存在しないので、アラーム マネージャがあなたに代わってアプリケーションを送信する必要があります。つまり、これらのインテントは、アプリケーションが許可されていることではなく、アラーム マネージャーが許可されていることしか実行できないことを意味します。アラーム マネージャが単純に何でもできるとしたら、すべてのアプリケーションはアラーム マネージャをプロキシとして使用することで何でもできます。そのため、保留中のインテントを使用して、特定のインテントに必要な権限をアラーム マネージャーに明確に付与する必要があります。[/編集]

それを除けば、少なくとも使用法に関する限り、通常のインテントとの違いはあまりありません。スティッキーインテントなどでもう少し複雑になりますが、少なくとも私が知る限り、それが一般的な要点です。

特定のシステム イベントや他のアプリケーションのイベントに反応する場合は、ブロードキャスト レシーバーが必要です。ブロードキャスト レシーバーは目に見えず、ビューの形式を作成せず、ユーザー インタラクションの形式も含みません。利点は、アプリケーション (またはアクティビティ) が現在実行されているかどうかに関係なく、これが発生する可能性があることです。

ブロードキャスト レシーバーは、約 10 秒しか実行できず、その後はシステムによって強制終了されます。したがって、長時間実行されるプロセスを実行したい場合は、バックグラウンド サービスを使用するか、アクティビティを開いてユーザーが何かを実行できるようにする必要があります。

于 2012-06-13T10:23:01.857 に答える