2012-02-01 5 views

答えて

7

これはアプリケーションコンテキストです。

public abstract void onReceive (Context context, Intent intent) 
+11

それはアプリケーションコンテキストかもしれませんが、それはそのコンテキストの制限されたバージョンです。 'Context'のAndroidソースコードでは、これは' ReceiverRestrictedContext'と呼ばれ、このContextは 'registerReceiver()'や 'bindService()'のような特定の操作を許可しません。 'onReceive()'に本当にアプリケーションコンテキストが必要な場合は、 'context.getApplicationContext()'を呼び出す必要があります。 –

+0

@ coder_For_Life22どのアプリケーションのコンテキストですか?ブロードキャストを受信したアプリケーションまたはブロードキャストを送信しているアプリケーション? – Bhargav

0

受信者が実行されているコンテキストです。たとえば、ブロードキャストメッセージがUsbManagerからのものである場合、コンテキストはUsbManagerのコンテキストです。
詳細情報:BroadcastReceiver

+0

これは意味をなさない。コンテキストは、誰が*送信*したのかというコンテキストではなく、受信者が登録されたコンテキストである可能性が高くなります。 UsbManagerのあなたの例は、あなたのアプリの外の(システム)コンポーネントからのブロードキャストを示唆しています。あなたのレシーバーが別のアプリのコンテキストで呼び出された場合、それは意味をなさないでしょう... – JHH

0

歴史的には、それはReceiverRestrictedContextのインスタンスですが、このクラスは、最近のAndroidのバージョンではなくなっている(正確ではないこれはAPIレベルやるが、それはAPI 26個のソースには存在しないのです)、それを今、アプリケーションコンテキストでなければなりません。

ReceiverRestrictedContextBroadcastReceiverからBroadcastReceiverを登録することができませんでした。

ReceiverRestrictedContextのインスタンスは、あなたのBroadcastReceiverがインスタンス化されるたびに作成されているので、あなたが長く、あなたの(非常に短いが住んでいた)よりもライフサイクルを持つコンポーネントに渡していないに注意する必要がBroadcastReceiver、またはあなたがこれらのメモリリークを作成します古い(これほど多くはありません)このReceiverRestrictedContextのAndroidバージョン。

getApplicationContext()を安全に呼び出して、その結果をより長寿命のコンポーネントに渡すことができます。

最近のAndroidバージョンからReceiverRestrictedContextが削除されても、「BroadcastReceiverCeption」を作成できるわけではありません。

関連する問題