【问题标题】:How to control Activity flow - Back button versus Home button如何控制活动流程 - 返回按钮与主页按钮
【发布时间】:2012-09-05 15:07:36
【问题描述】:

我的应用程序中有 3 个活动:

Activity1 -> Activity2 -> Activity3

在Activity3里面,如果用户按下Back,我想回到Activity2。在 Activity3 的 onPause 事件中,我添加了一个finish() 语句。这可能甚至没有必要,但我想确保这个 Activity 得到清理。这很好用。

但是,在 Activity3 中,如果用户按 Home 或启动新应用(通过通知栏或其他方式),我希望 Activity3 和 Activity2 都完成。如果用户返回到这个应用程序,他应该使用 Activity1 继续。

我已经想出了如何处理其中一种情况,但我不知道如何处理这两种情况,如果可能的话。我可以捕获 Activity3 中的“返回”按钮并向 Activity2 发送一条消息,告诉它不要发送给finish() 吗?无论您如何将活动发送到后台,活动似乎都遵循相同的生命周期流程(暂停、停止)。

只是为了回答我为什么想要这种行为的问题,假设Activity1 是登录屏幕,Activity2 是选择屏幕,Activity3 是内容屏幕。如果我从内容页面按返回,我希望能够做出新的选择。如果我通过任何其他方式(主页、通知栏)退出,我希望用户是 "logged out"

提前感谢您的帮助。

【问题讨论】:

    标签: android android-activity android-intent


    【解决方案1】:

    我再次回答了我自己的问题。我会在此处发布我的解决方案,以防对其他人有所帮助。

    在Activity2和Activity3的onPause事件中,我添加了finish()。这会处理用户在这些活动中按下 Home 或响应通知栏事件的情况。由于这些活动都已完成,如果用户返回应用程序,他们将获得 Activity1(现在位于堆栈顶部。)

    在 Activity3 中,我为“Back”键添加了一个 onKeyDown 陷阱。由于 Activity2 在 onPause 时被杀死,我们必须从 Activity3 中触发一个新的 Activity2。启动 Activity2 后,Activity3 结束。下面是Activity3的onKeyDown的代码:

    public boolean onKeyDown(int keyCode, KeyEvent event){
        if(keyCode == KeyEvent.KEYCODE_BACK) {
                Intent Act2Intent = new Intent(thisActivity, Activity2.class);              
                startActivity(Act2Intent);          
                finish();
                return true;
        }
        return false;
    }
    

    【讨论】:

      【解决方案2】:

      您还可以在 AndroidManifest.xml 中为 Activity1 提供 android:clearTaskOnLaunch 属性。

      【讨论】:

      • 但这是否允许我从 Activity3 按“返回”返回到 Activity2?还是会一直回到 Activity1?
      【解决方案3】:

      在主要活动上添加:

      android:launchMode="singleTask" android:clearTaskOnLaunch="true"

      在其他地方添加:

      android:finishOnTaskLaunch="true"
      

      这样,在后台返回应用程序时,它会终止任何活动。

      【讨论】:

        【解决方案4】:

        @RMS2 您建议的答案.. 会提供返回功能吗?我也遇到了类似的问题,所以我没有覆盖 onpause 和恢复,而是覆盖了 onUserLeaveHint() 方法。通过这种方式,我的应用程序知道用户何时按下主页按钮并完成活动。

        【讨论】:

          猜你喜欢
          • 2020-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-14
          • 1970-01-01
          • 2013-06-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多