0

アプリのメイン アクティビティからブロードキャスト レシーバー クラスを開始したいと考えています。メイン アクティビティにはすべての GUI 要素があり、このアクティビティはすべての作業を実行するサービスを開始します。このサービスを再起動後に開始するために、ブロードキャスト レシーバー クラスを作成しました。今、ブロードキャストレシーバークラスをどこで呼び出すべきか混乱しています。

  • メイン アクティビティから呼び出すにはどうすればよいですか (メイン アクティビティをブロードキャスト レシーバーにしたくありません)。
  • メイン アクティビティからブロードキャスト レシーバーを呼び出すと、アクティビティが開始されるたびにブロードキャスト クラスの新しいインスタンスが作成されますか。その場合、メモリ リークが発生するか、以前のブロードキャスト レシーバ インスタンスが自動的に破棄されますか?

よろしく

4

2 に答える 2

1

解決策として、独自のインテント フィルターを に適用して登録し、レシーバーを登録した直後にアクティビティBroadcastReceiverを呼び出すことができます。sendBroadcast()これは、メソッド内でレシーバーに送信されるインテントを比較するとしますonReceive()

メモリについては、アクティビティのライフサイクルをどのように管理するかによって異なります。これは、アクティビティへの参照が残っている場合、メモリから削除されず、レシーバの複数のインスタンスが作成されるためです。

また、android.intent.action.BOOT_COMPLETEDインテント フィルターを追加して、デバイスの起動後に受信機を起動することもできます

于 2013-06-14T12:39:54.167 に答える
0

任意のアクティビティ (メイン アクティビティを含む) またはクラスからメッセージをブロードキャストできます。これを行うためにヘルパークラスを使用しています:

public class BroadcastHelper {

public static void sendBroadcast(Context context, String message, Serializable value) {

    Intent broadcastIntent = new Intent();
    broadcastIntent.setAction(message);
    broadcastIntent.putExtra(Constants.BROADCAST_MESSAGE, value);
    context.sendBroadcast(broadcastIntent);

}

}

レシーバーをマニフェスト ファイルに登録することを忘れないでください。

このアプローチを使用すると、ガベージ コレクションされるインテント自体を除いて、どのクラスの新しいインスタンスも作成されません。

于 2013-06-14T12:47:56.700 に答える