Android 在不破坏最底层活动的情况下回顾一些活动

Android 在不破坏最底层活动的情况下回顾一些活动,android,android-intent,android-activity,kotlin,android-lifecycle,Android,Android Intent,Android Activity,Kotlin,Android Lifecycle,我做了一个简单的样本,包括3项活动: ActivityA ActivityB val intent = Intent(this, ActivityB::class.java) startActivity(intent) ActivityC val intent = Intent(this, ActivityC::class.java) startActivity(intent) 每个按钮上只有一个按钮 ActivityA上的按钮打开ActivityB

我做了一个简单的样本,包括3项活动:

  • ActivityA

  • ActivityB

  •     val intent = Intent(this, ActivityB::class.java)
        startActivity(intent)
    
  • ActivityC

  •     val intent = Intent(this, ActivityC::class.java)
        startActivity(intent)
    
    每个按钮上只有一个按钮

    • ActivityA
      上的按钮打开
      ActivityB

          val intent = Intent(this, ActivityB::class.java)
          startActivity(intent)
      
    • ActivityB
      上的按钮打开
      ActivityC

          val intent = Intent(this, ActivityC::class.java)
          startActivity(intent)
      
    • ActivityC
      上的按钮应返回到
      ActivityA
      ,但在此过程中禁用ActivityB

          val intent = Intent(this, ActivityA::class.java)
          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
          intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
          startActivity(intent)
      
    它执行我想要的操作,整个流程在登录时如下所示:

    ActivityA onCreate()
    ActivityA button clicked
    ActivityB onCreate()
    ActivityB button clicked
    ActivityC onCreate()
    ActivityC button clicked
    ActivityB onDestroy()
    ActivityA onDestroy()
    ActivityA onCreate()
    ActivityC onDestroy()
    
    此解决方案的问题在于,
    ActivityA
    会被重新创建(销毁并创建)有没有办法恢复它?

    免责声明:
    当然,这只是一个简化的案例。由于我应用程序中的几个原因,我宁愿避免使用
    onActivityResult()
    finish()
    点击方式。我需要保持正确的后退按钮行为。

    你几乎做对了。您缺少的(为了避免活动重新创建)是一个
    标志\u activity\u SINGLE\u TOP
    标志

    val intent = Intent(this, ActivityA::class.java)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
    startActivity(intent)
    

    更多信息

    当B转到C时,使用finish();当C转到A时,使用finish();打电话给IntentI后,由于许多原因,我不能这样做。这只是一个简单的案例,你能告诉我一个原因吗?@AbhinavGupta Simple-我不想在每一个案例的过程中扼杀每一项活动。有些特殊情况我需要像这样回去。您的解决方案完全停止了备份/启动按钮的行为。请在Manifeat的活动标签中使用android:launchMode=“singletask”