如何控制活动流程 - 后退按钮与主页按钮

时间:2010-09-02 03:50:45

标签: android android-activity android-intent

我的申请中有3项活动:

Activity1 -> Activity2 -> Activity3

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

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

我已经想出了如何做其中一个,但我无法弄清楚如何处理这两种情况,如果有可能的话。我可以在Activity3中捕获“后退”按钮并将消息发送回Activity2,告诉它不要finish()吗?看起来活动遵循相同的生命周期流程(暂停,停止),无论您将它们发送到后台如何。

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

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:10)

我再次回答了自己的问题。我会在这里发布我的解决方案,以防它帮助其他人。

在Activity2和Activity3的onPause事件中,我添加了finish()。这将处理用户在这些活动中按Home或响应Notification Bar事件的情况。由于这些活动都已完成,如果用户返回应用程序,他们将获得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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在主要活动上添加:

  

机器人:launchMode = “singleTask”   机器人:clearTaskOnLaunch = “真”

在其他人上添加:

android:finishOnTaskLaunch="true"

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

答案 3 :(得分:0)

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