我正在创建一个需要多个活动的简单应用程序。我的应用程序必须根据特定的系统首选项恢复两个活动之一。因此,我实现了一个与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”)我考虑过实现一个布尔类变量handled
,它在活动开始之前进行了测试。如果发现值为handled
,则true
simple会调用Dispatcher
,但如果值为finish()
,则会启动相应的活动并{ {1}}设置为false
,以便当应用程序返回此handled
时,它将完成。
这不起作用,因为......
如果用户在其中一个结果活动上按下主页按钮,那么当他们恢复应用程序时,他们将被置于调度程序活动中,应用程序将立即完成,因为它认为它已被处理(变量是仍然是真的。)
我试图找到一些方法,每个应用程序生命周期只运行一次true
。这是有道理的,因为用户永远不想返回Activity
,因为它是Dispatcher
,只应在发布时运行一次。因此,我包含了一个计数器,每次调用onResume()时都会递增,并且每次调用finish()时都会减少为0.
这不起作用,因为......
同样,如果用户按下主页按钮,那么当重新启动应用程序时,Dispatcher
将认为它已经运行过一次(因为没有通话)到Activity
),并立即重新开始。
我想如果我能以某种方式确定哪个活动以前处于活动状态,那么我可以动态地对用户按下后退按钮的情况做出反应,然后然后只有通知{{1它应该完成,然后在用户按下主页按钮的情况下不会立即完成。
这是通过使用静态函数Dispatcher
来完成的,当从菜单finish()
调用时,它会在Dispatcher
类中引发一个标志,告知它完成。
只需将所有活动切换代码移动到onCreate()即可。这将强制returningFromMenu()
的“一次性”。
这可能有用,因为......
这将处理用户返回活动的情况(使用onResume()),并且由于没有标志,因此在按下主页按钮后返回应用程序时没有问题。
除了必须使用静态方法或成员之外,有没有办法确定最后完成哪个Activity
?我知道这是一种非常糟糕的做法,如果可能的话,我希望避免使用它。
上次更新日期:2013年2月12日美国东部时间下午3:45
方法#4似乎正在为我的目的而工作,但是我仍然认为这里的问题可能对开发人员有很大用处,并且在我给予足够时间以获得更全面的解决方案之前,我将不会回答我的问题。帐。
答案 0 :(得分:0)
正如上面“更新”中所述,只需将代码移入onCreate()
即可解决此问题,以便只进行一次切换。同样地,我可以在启动活动后立即调用finish()
,以便从后栈中删除调用活动。
感谢大家在评论部分所做的努力!