Android:重复的活动Onbackpressed()



我只是试图口头解释我现在遇到的麻烦,而不是显示整个代码,因为我认为您更容易弄清楚问题是什么。

我以活动a 开始。当我在此处单击按钮b 时,然后移动到活动C 。在此活动中配置了几件事后,我按了后面的按钮,以返回以前的活动a

这是活动B onBackPressed()部分。

@Override
public void onBackPressed() {
  if (mediaPlayer != null && mediaPlayer.isPlaying()) {
     mediaPlayer.stop();
     mediaPlayer.release();
  }
  Intent intent = new Intent();
  intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
  startActivityForResult(intent, RESULT_OK);
  finish();
}

使用该代码,我设法回到了上一个,活动a 。但是,当我在此活动中再次单击"返回"按钮时,我发现自己具有相同的活动a 具有预配置状态的。

这是活动A onBackPressed()

@Override
public void onBackPressed() {
  super.onBackPressed();
  turnOffRingtone(RingtoneVolumeControl.PLAYER);
}
private void turnOffRingtone(MediaPlayer ringtone) {
  try {
    if (ringtone != null) {
      ringtone.stop();
      ringtone.release();
    }
  } catch(IllegalStateException e) {
      Log.i(ApplicationManager.LOG, e.getMessage());
  }
}

通过活动的意图。

intent.addflags(intent.flag_activity_clear_top | intent.flag_activity_new_task);

如果您试图与StartactivityForresult和OnActivityResult一起工作,您会从我的理解中做错了几件事。首先,当您启动B活动时,您应该使用:

 startActivityForResult(intentB,1);

进行B活动后,进行代码逻辑,当您准备返回以前的活动(在这种情况下使用Backed)时,您应该做以下操作:

@Override
public void onBackPressed() {
    if(mediaPlayer != null && mediaPlayer.isPlaying()) {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
    Intent intent = new Intent();
    setResult(RESULT_OK, intent);
    finish();
}

现在,回到活动A中,您可以处理活动b

的响应
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            //Write youy code for your result
         }
     }
}

您必须在活动B

中做类似的事情
    Intent intent = new Intent();
    setResult(RESULT_OK, intent);
    finish();

尝试这个。因为您将在活动B onbackpresse()中再次启动一项活动

如果您不正确地 finish()活动,可能会发生这种情况。

如果要像在音乐播放器应用中那样将Activity A避免终止,则可以使用android:launchMode=singleTask属性进行此类活动:

<activity
    android:name=".ActivityA"
    android:label="ActivityA"
    android:launchMode="singleTask">

这是因为允许使用android:launchMode=singleTask的活动在您的应用中只有一个实例。

如果要向现有的Activity A发送意图,则需要通过在Activity A中覆盖onNewIntent()来捕获意图。

最新更新