【问题标题】:Clear all activities清除所有活动
【发布时间】:2020-07-08 00:55:10
【问题描述】:

我有 4 项活动:A、B、C 和 D。还有一项:E。

当你在A、B、C和D之间开始一个新的活动时没有问题。但是在其中的某些点(例如,当登录成功时)我们想开始活动E但清除所有A、B , C 和 D 活动(即清退栈)。

所以,我想当你到达活动 E 时,按下后退按钮,你将离开应用程序。

我正在尝试在 startActivity 中添加标志:Intent.FLAG_ACTIVITY_CLEAR_TASK、Intent.FLAG_ACTIVITY_CLEAR_TOP 等等,但我无法实现这种行为。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: android stack back


    【解决方案1】:
    Intent intent = new Intent(this, EActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                    this.startActivity(intent);
                    this.finish();
    

    【讨论】:

    • 这对我不起作用。最后解决方案是BroadcastReeiver,以实现我想要的登录/注销结构。
    • 使用 setFlag() insted of addFlag() 像这样 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    【解决方案2】:

    将活动 E 中的 onBackPressed 覆盖为

        @Override
        public void onBackPressed() {
            moveTaskToBack(true);
        }
    

    【讨论】:

      【解决方案3】:

      试试startActivity活动A、B、C和E

      Intent intent = new Intent(A.this,B.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
      startActivity(intent);
      A.this.finish();
      

      并在androidmanifest.xml 中声明您的 A、B 和 C 活动:

      <Activity android:name=".A" 
          android:launchMode="singleInstance" />
       //..do B,C activities same
      

      并覆盖 Activity E 中的 onKeyDown

      @verride
      public boolean onKeyDown(int keyCode, KeyEvent event)
      {
          if ((keyCode == KeyEvent.KEYCODE_BACK))
          {
              Activity_E.this.finish();
          }
          return super.onKeyDown(keyCode, event);
      }
      

      【讨论】:

      • 好的。好主意!但问题是我想要这样的特定行为:如果我还没有到达活动 E,我希望用户可以回到另一个活动,所以我无法完成它们,直到我留在活动 E。我不不知道你是否理解我。感谢您的回答!
      • @alberking : 我明白你亲爱的。只需使用一个字符串标志,您可以在其中存储当前活动名称并在开始新活动时有意发送。在新的活动中,在调用 Activity.this.finish() 之前检查用户来自哪个活动,或者如果用户在 E 活动内,则在后按时完成 E 活动,如果用户在活动 D 内,则在后按开始 C 活动。 ...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多