2014-01-05 22 views
10

1)私にはアクティビティがあります。このアクティビティはサービスを開始し、サービスはBroadcastReceiverを作成して登録します。BroadcastReceiverライフサイクル

2)私はアクティビティを持っています。このアクティビティは、BroadcastReceiverを作成して登録します。

上記の各ケースでBroadcastReceiverのライフエンドはいつ終了するのですか?言い換えれば - それが破壊され、放送をもう聞かないのですか?

答えて

4

独立したライフサイクルを達成するために、マニフェスト内にブロードキャストレシーバを宣言します。

http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

おかげで、それはややそれをクリアするが、私はまだ私の目標を達成するかどうかはわかりません。私の活動は、BroadcastReceiverを登録するためにのみ使用されます。私は明示的に登録を解除するまで、ユーザーがアクティビティを終了した後、このレシーバをアクティブにします。 – rincEwind

+1

@rincEwind:** "ユーザーがアクティビティを終了した後、このレシーバをアクティブにしたい - 明示的に登録を解除するまで、このレシーバを有効にします。** - その場合、方法1を使用してください。 'Activity'にレシーバを登録して、まずそれを登録解除せずに' Activity'を終了してはいけません。 'Service'に登録しますが、' Service'も終了前に登録を解除するようにしてください(終了した場合)。孤立した物をぶら下げないでください。 – Squonk

+0

ありがとう、それは私がやってしまったことです、それは働いているようです。 – rincEwind

0

A BroadcastRecieverライフサイクルの終了は、あなたがそれを登録解除する場合(つまり、放送の受信を停止します)。通常、これはonPause/onStopメソッドで行います。技術的にはあなた次第です。

例:リンクの

@Override 
public void onResume() { 
    super.onResume(); 

    // Register mMessageReceiver to receive messages. 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
     new IntentFilter("my-event")); 
} 

// handler for received Intents for the "my-event" event 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // Extract data included in the Intent 
    String message = intent.getStringExtra("message"); 
    Log.d("receiver", "Got message: " + message); 
    } 
}; 

@Override 
protected void onPause() { 
    // Unregister since the activity is not visible 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onPause(); 
}