我的申请中有3项活动:
Activity1 -> Activity2 -> Activity3
在Activity3内,如果用户按下Back,我想返回Activity2。在Activity3的onPause事件中,我添加了finish()
语句。这可能甚至没有必要,但我想确保此活动得到清理。这很好。
但是,在Activity3中,如果用户按Home或启动新应用程序(通过通知栏或其他方式),我希望Activity3和Activity2都完成。如果用户返回此应用程序,则应继续使用Activity1。
我已经想出了如何做其中一个,但我无法弄清楚如何处理这两种情况,如果有可能的话。我可以在Activity3中捕获“后退”按钮并将消息发送回Activity2,告诉它不要finish()
吗?看起来活动遵循相同的生命周期流程(暂停,停止),无论您将它们发送到后台如何。
为了回答我为什么要这种行为的问题,假设Activity1
是登录屏幕,Activity2
是选择屏幕,Activity3
是内容屏幕。如果我从内容页面按Back,我希望能够进行新的选择。如果我通过任何其他方式(主页,通知栏)退出,我希望用户为"logged out"
。
提前感谢您的帮助。
答案 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()方法。通过这种方式,我的应用程序知道用户何时按下主页按钮并完成活动。