私はBroadcastReceiver
がActivityの内部クラスとして定義されている場合は使用できないことを知っています。しかし、私はなぜだろうか?それはシステムが受信者インスタンスをインスタンス化するために大きなActivity
オブジェクトをインスタンス化する必要があるからですか?内部クラスとしてのBroadcastReceiver
12
A
答えて
26
...システムは受信者インスタンスをインスタント化するために大きなアクティビティオブジェクトをインスタンス化する必要があるためですか?
他の非静的内部クラスと同様です。 (静的でない)内部クラスのインスタンスを作成する前に、外部クラスのインスタンスをどこかから取得しなければなりません(インスタンス化やその他のメカニズムによって)。
システムによって自動的にインスタンス化されるマニフェストファイルのインテントから呼び出されるグローバルブロードキャストレシーバは、ブロードキャストレシーバの非スタティック内部クラスのインスタンスを作成するために使用する外部インスタンスを持っていません。これは外部クラスとは無関係ですが、Activityかどうかは関係ありません。
ただし、アクティビティの作業の一部として受信者を使用している場合は、アクティビティで自分自身でブロードキャスト受信者をインスタンス化できます(アクティビティコールバックの1つで、外部クラスのインスタンス:this
)、その後、必要に応じてそれを登録/登録解除:私はオンラインいくつかの例で見たように、私はあなたが(とも示唆として、内部クラスを使用しようとしました
public class MyActivity extends Activity {
private BroadcastReceiver myBroadcastReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(...) {
...
}
});
...
public void onResume() {
super.onResume();
....
registerReceiver(myBroadcastReceiver, intentFilter);
}
public void onPause() {
super.onPause();
...
unregisterReceiver(myBroadcastReceiver);
}
...
}
関連する問題
- 1. 内部クラスとしてバインディングコンバータ?
- 2. BroadcastReceiver内部クラスはトリガーされません
- 3. 内部クラスとしてのフラグメント
- 4. BroadCastReceiverクラスのNullPointerException。
- 5. クラスBroadcastReceiverのActivityNotFoundException
- 6. Molesと内部クラス
- 7. フラグメント内の内部クラスとしてのDialogFragment(サポートライブラリフラグメントv4)
- 8. クラスと内部クラスのアクセス修飾子
- 9. Java - メソッドまたは内部クラスまたはクラスとして?
- 10. モジュール内のクラスのネストとクラス名の一部としてのモジュールの使用
- 11. Pythonスタイルの質問:クラスを内部クラスとしてサポートしていますか?
- 12. 内部クラスが外部クラスを継承しているときのスーパーと比較して
- 13. 内部クラスとローカル変数
- 14. アクセスと内部匿名クラス
- 15. C++テンプレートと内部クラス
- 16. アクションリスナと内部クラスjava
- 17. Java:defineClassと内部クラス
- 18. C++内部クラスCTORとパラメータ
- 19. のJava:外部クラスと内部クラス間の同期
- 20. 呼び出し外クラスの内部クラス
- 21. Javaの内部クラスとローカル内部クラスの違いは何ですか?
- 22. 内部クラスの公開メソッドと内部メソッドの比較
- 23. Androidの互換性パッケージ内部静的クラスとしてのフラグメント
- 24. C#の内部クラス
- 25. のJava - 内部クラス
- 26. ベクトル内部のクラス
- 27. Javaの内部クラス
- 28. スカラの内部クラス
- 29. Javaの内部クラス
- 30. は内部クラス
):https://gist.github.com/daviddoria/80c9c5dc98913b54bf00しかし、デバイスを回転させるとonReceiveは呼び出されません。助言がありますか? –
bertは、これは外部クラスオブジェクトを保持することによって任意のメモリリークにつながるのですか? –