2010-09-02 76 views
3

我在我的应用程序3个活动:如何控制活动流程 - 后退按钮与Home键

Activity1 -> Activity2 -> Activity3 

里面Activity3,如果用户按下后退,我想回到活性2。在Activity3的onPause事件中,我添加了一条finish()声明。这可能不是必要的,但我想确保这个活动得到清理。这工作正常。

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

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

只是回答,为什么我想这种行为的问题,想象Activity1是一个登录界面,Activity2是选择画面,Activity3是一个内容画面。如果我从内容页按下后退,我希望能够做出新的选择。如果我通过任何其他方式(主页,通知栏)退出,我希望用户成为"logged out"

在此先感谢您的帮助。

回答

10

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

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

在Activity3中,我为“后退”键添加了onKeyDown陷阱。由于Activity2在继续暂停时被终止,我们必须从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中的android:clearTaskOnLaunch属性。

+0

但是,这是否允许我从Activity3按“返回”返回到Activity2?或者它会一直回到Activity1? – RMS2 2010-09-03 04:37:36

0

在主要活动添加:

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

在其他补充:

android:finishOnTaskLaunch="true" 

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

0

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