私はBroadcastReceiverをインスタンス化し、andReceive()がアンドロイドフレームワークによって呼び出されると、onReceive()メソッドに渡されるコンテキストは何ですか? これはアクティビティのコンテキストですか?アプリケーションコンテキストの?BroadcastReceiverのonReceive()でアンドロイドが渡すコンテキストとは
ありがとうございます。
私はBroadcastReceiverをインスタンス化し、andReceive()がアンドロイドフレームワークによって呼び出されると、onReceive()メソッドに渡されるコンテキストは何ですか? これはアクティビティのコンテキストですか?アプリケーションコンテキストの?BroadcastReceiverのonReceive()でアンドロイドが渡すコンテキストとは
ありがとうございます。
これはアプリケーションコンテキストです。
public abstract void onReceive (Context context, Intent intent)
受信者が実行されているコンテキストです。たとえば、ブロードキャストメッセージがUsbManagerからのものである場合、コンテキストはUsbManagerのコンテキストです。
詳細情報:BroadcastReceiver
これは意味をなさない。コンテキストは、誰が*送信*したのかというコンテキストではなく、受信者が登録されたコンテキストである可能性が高くなります。 UsbManagerのあなたの例は、あなたのアプリの外の(システム)コンポーネントからのブロードキャストを示唆しています。あなたのレシーバーが別のアプリのコンテキストで呼び出された場合、それは意味をなさないでしょう... – JHH
歴史的には、それはReceiverRestrictedContext
のインスタンスですが、このクラスは、最近のAndroidのバージョンではなくなっている(正確ではないこれはAPIレベルやるが、それはAPI 26個のソースには存在しないのです)、それを今、アプリケーションコンテキストでなければなりません。
ReceiverRestrictedContext
BroadcastReceiver
からBroadcastReceiver
を登録することができませんでした。
ReceiverRestrictedContext
のインスタンスは、あなたのBroadcastReceiver
がインスタンス化されるたびに作成されているので、あなたが長く、あなたの(非常に短いが住んでいた)よりもライフサイクルを持つコンポーネントに渡していないに注意する必要がBroadcastReceiver
、またはあなたがこれらのメモリリークを作成します古い(これほど多くはありません)このReceiverRestrictedContext
のAndroidバージョン。
getApplicationContext()
を安全に呼び出して、その結果をより長寿命のコンポーネントに渡すことができます。
最近のAndroidバージョンからReceiverRestrictedContext
が削除されても、「BroadcastReceiverCeption」を作成できるわけではありません。
それはアプリケーションコンテキストかもしれませんが、それはそのコンテキストの制限されたバージョンです。 'Context'のAndroidソースコードでは、これは' ReceiverRestrictedContext'と呼ばれ、このContextは 'registerReceiver()'や 'bindService()'のような特定の操作を許可しません。 'onReceive()'に本当にアプリケーションコンテキストが必要な場合は、 'context.getApplicationContext()'を呼び出す必要があります。 –
@ coder_For_Life22どのアプリケーションのコンテキストですか?ブロードキャストを受信したアプリケーションまたはブロードキャストを送信しているアプリケーション? – Bhargav