0

アプリで Application クラスを拡張しました。そのクラスには、接続の変更を待機する BroadcastReceiver があります。完全な接続が失われると、特定のアクティビティが表示されます。ただし、アプリが「フォーカスされていない」(フォアグラウンドではない) 場合、そのアクティビティを表示したくありません。

ただし、Application クラスには onPause または onResume メソッドがありません。アプリが実行されている場合にのみ、このアクティビティを表示するにはどうすればよいですか? すべてのアクティビティに BroadcastReceiver が必要ですか (かなりの数があり、さまざまなアクティビティ クラス (Activity、ListActivity、FragmentActivity など) を拡張するため、それらすべてに対して拡張アクティビティを作成することはできません) 。アプリのアクティビティの 1 つがフォアグラウンドにある場合にのみ、アクションが実行される BroadcastReceiver を 1 つだけ持つことは可能ですか?

4

1 に答える 1

1

カスタム Application クラスに BroadcastReceivers を登録することはアンチパターンだと思います。たとえば、いつその受信者を登録解除しますか? おっしゃったように、Application クラスには、Activity が持つライフサイクル コールバックがありません (少なくともそのほとんどは)。

あなたの場合、 onResume() コールバックのすべてのアクティビティで接続の変更を動的に処理するレシーバーを登録し、 onPause() コールバックでそれらを登録解除します。すべてのアクティビティが FragmentActivity を拡張できる可能性は十分にあります。ListAcitivity は単なるヘルパー クラスであり、リスト関連のすべてのものを自分で簡単に処理でき、FragmentActivity は基本的な Activity クラスを拡張するだけです。

そのため、FragmentActivity を拡張するレシーバー登録を処理するアクティビティのカスタム基本クラスを作成することをお勧めします。すべての具体的なアクティビティ クラスは、この基本クラスを拡張する必要があります。

于 2012-09-07T12:40:59.080 に答える