2

BroadcastReceiverAC接続および切断などのシステムブロードキャストを処理するを持っています。BroadcastReceiver受信POWER_CONNECTEDして、アクティビティ「MainActivity」を開始します。このアクティビティは、ロックを解除KeyGuardして取得しWakeLockます。onCreateとで私はonResume動的に登録しBroadcastReceiverてリッスンしPOWER_DISCONNECTEDます。

「MainActivity」は2番目の「VideoPlayerActivity」を開始します。これもBroadcastReceiverリスニングを登録しPOWER_DISCONNECTEDます。

over adbを送信すると、ACTION_POWER_DISCONNECTLogCatで「MainActivity」が最初に停止することがわかります。なんで?

「VideoPlayerActivity」が最初に終了することをどのように処理できますか?

ありがとう

4

2 に答える 2

2

ここを見てください(http://developer.android.com/reference/android/content/BroadcastReceiver.html):

通常のブロードキャスト(Context.sendBroadcastで送信)は完全に非同期です。ブロードキャストのすべての受信者は、多くの場合同時に、未定義の順序で実行されます。これはより効率的ですが、受信者が結果を使用したり、ここに含まれているAPIを中止したりできないことを意味します。

VideoPlayerActivityが受信することを保証することはできません。

別のBroadcastReceiver(アクティビティの一部ではありません)を作成することをお勧めします。そして、この放送受信機では、次のようなことを行います。

videoPlayerActivity.finish();
mainActivity.finish();

もちろん、アクティビティのonCreateまたはonResumeでこれらの変数の両方を初期化する必要があります。

于 2012-09-03T19:24:26.143 に答える
0

実際、あなたはメインアクティビティにブロードキャストレシーバーを登録したので、BroadcastReceiverのメインアクティビティのコンテキストを渡すので、そのアクティビティのみを終了できます。

それでは、これを台無しにして、電源切断アクションレシーバーのonReceive()に次のコード行を書き込むだけです。

public void onReceive(Context context, Intent intent) {
 Intent startMain = new Intent(Intent.ACTION_MAIN);
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(startMain);
}

楽しみ

于 2012-09-03T20:14:50.703 に答える