0

ブロードキャスト インテントを受信して​​いないシングルトン クラスにブロードキャスト レシーバーがあります。

シングルトンはコンテキストで初期化されます (つまり、getInstance(context))。

getContext().sendBroadcast(intent); を呼び出します。しかし、BroadcastReceiver は何も取得しません。インテント フィルタが一致していることを確認しました。

レシーバーを登録する方法は、シングルトンコンストラクターにあるようです

private class Singleton(Context context) {
    context.registerReceiver(mReceiver, INTENT_FILTER);
....

private onDestroy(Context context) {
    context.unregisterReceiver(mReceiver);
....

どうしたの!?

4

1 に答える 1

3

わかりましたので、何が間違っていたかを理解しました。シングルトンはアクティビティによって作成されているため、渡されるコンテキストはアクティビティ コンテキストです。 したがって、コンストラクターを次のように更新する必要がありました。

private class Singleton(Context context) {
    context.getApplicationContext().registerReceiver(mReceiver, INTENT_FILTER);

なぜこれが違いを生むのか分かりません。私の推測では、アクティビティ コンテキストが破棄されているため、BroadcastReceiver が破棄されているのでしょうか。追加の洞察を歓迎します!

于 2013-08-17T00:45:32.680 に答える