如何控制Activity流程 - 返回按钮与主页按钮的区别

3

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

Activity1 -> Activity2 -> Activity3

在Activity3中,如果用户按下Back键,我想返回到Activity2。在Activity3的onPause事件中,我添加了一个finish()语句。这可能甚至不是必要的,但我想确保这个Activity被清理干净。这很好地解决了问题。
然而,在Activity3中,如果用户按下Home键或启动新应用程序(通过通知栏或其他方式),我希望Activity3和Activity2都能结束。如果用户返回该应用程序,则应恢复到Activity1。
我已经找出如何实现其中一种情况,但我无法想出如何处理两种情况,如果可能的话。我能否在Activity3中捕获“Back”按钮,并向Activity2发送消息告诉它不要finish()?似乎不管你怎么做将它们发送到后台,这些活动都会遵循相同的生命周期流程(暂停、停止)。
只是回答为什么我想要这种行为的问题,想象一下Activity1是一个登录屏幕,Activity2是一个选择屏幕,Activity3是一个内容屏幕。如果我从内容页面返回,我想能够进行新的选择。如果我通过任何其他方式退出(Home键,通知栏),我希望用户被“注销”。
提前感谢您的帮助。
4个回答

10

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

在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;
}

1

但是这样能让我从Activity3按“返回”按钮回到Activity2吗?还是它只会一直返回到Activity1? - RMS2

0
在主活动中添加以下内容:

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

在其他活动中添加以下内容:
android:finishOnTaskLaunch="true"

这样做可以在从后台返回应用程序时终止任何活动。


0

@RMS2你提出的答案...那会提供返回功能吗?我也遇到了类似的问题,所以我不是覆盖onPause和onResume,而是覆盖了onUserLeaveHint()方法。通过这种方式,我的应用程序知道用户何时按下Home按钮并完成活动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接