如何获取最近访问活动的参考

时间:2013-02-12 20:04:56

标签: android android-activity

我正在创建一个需要多个活动的简单应用程序。我的应用程序必须根据特定的系统首选项恢复两个活动之一。因此,我实现了一个与Dispatcher相关联的action.MAIN类,然后通过检查其Activity回调中的系统首选项来启动正确的onResume()

问题

由于我在onResume()中执行此操作,当在任何结果活动上按下后退按钮时,Dispatcher将恢复,因此它再次尝试启动相同的{{ 1}}再次。这可以防止用户离开应用程序,除非他们按下主页按钮。

一些代码

以下是我的课程中的一些代码摘录,以帮助澄清我的情况:

Dispatcher.onResume(void):void

Activity

一些变量如下:

  • protected void onResume() { super.onResume(); if(!handled){ Intent activity_switcher; //If a game is active... if(manager.isGameActive()){ //Start the the Game Manager with the appropriate game. activity_switcher = new Intent(this, GameManager.class); } //If a game is not active... else{ //Start the Game Menu activity_switcher = new Intent(this, Menu.class); } //Start the appropriate activity startActivity(activity_switcher); overridePendingTransition(0, 0); } else{ //Finish the application finish(); overridePendingTransition(0, 0); } } 是表示我的类与系统首选项接口的变量。
  • manager是确定事件是否已被处理的变量(请参阅下面的“尝试的解决方案#1”)

尝试解决方案#1

我考虑过实现一个布尔类变量handled,它在活动开始之前进行了测试。如果发现值为handled,则true simple会调用Dispatcher,但如果值为finish(),则会启动相应的活动并{ {1}}设置为false,以便当应用程序返回此handled时,它将完成。

这不起作用,因为......

如果用户在其中一个结果活动上按下主页按钮,那么当他们恢复应用程序时,他们将被置于调度程序活动中,应用程序将立即完成,因为它认为它已被处理(变量是仍然是真的。)

尝试解决方案#2

我试图找到一些方法,每个应用程序生命周期只运行一次true。这是有道理的,因为用户永远不想返回Activity,因为它是Dispatcher,只应在发布时运行一次。因此,我包含了一个计数器,每次调用onResume()时都会递增,并且每次调用finish()时都会减少为0.

这不起作用,因为......

同样,如果用户按下主页按钮,那么当重新启动应用程序时,Dispatcher认为它已经运行过一次(因为没有通话)到Activity),并立即重新开始。

尝试解决方案#3

我想如果我能以某种方式确定哪个活动以前处于活动状态,那么我可以动态地对用户按下后退按钮的情况做出反应,然后然后只有通知{{1它应该完成,然后在用户按下主页按钮的情况下不会立即完成。

这是通过使用静态函数Dispatcher来完成的,当从菜单finish()调用时,它会在Dispatcher类中引发一个标志,告知它完成。

尝试解决方案#4(当前实施)

只需将所有活动切换代码移动到onCreate()即可。这将强制returningFromMenu()的“一次性”。

这可能有用,因为......

这将处理用户返回活动的情况(使用onResume()),并且由于没有标志,因此在按下主页按钮后返回应用程序时没有问题。


我的问题

除了必须使用静态方法或成员之外,有没有办法确定最后完成哪个Activity?我知道这是一种非常糟糕的做法,如果可能的话,我希望避免使用它。

更新

上次更新日期:2013年2月12日美国东部时间下午3:45

方法#4似乎正在为我的目的而工作,但是我仍然认为这里的问题可能对开发人员有很大用处,并且在我给予足够时间以获得更全面的解决方案之前,我将不会回答我的问题。帐。

1 个答案:

答案 0 :(得分:0)

解决方案

正如上面“更新”中所述,只需将代码移入onCreate()即可解决此问题,以便只进行一次切换。同样地,我可以在启动活动后立即调用finish(),以便从后栈中删除调用活动。

感谢大家在评论部分所做的努力!