家庭按键行为
在开发示例Android应用程序时,我构建了两个活动1)活动1 2)活动2
现在活动2是前台活动,而活动1是后台活动。 现在用户按Home键。 应用程序(即两个活动)消失。 现在我们重新启动应用程序,将Activity 1视为前台活动。 我的问题是:
1)按下主页键时,平台是否保持任何历史记录? 2)我们如何让用户参与重新启动应用程序的最后一次启动活动?
我已经为这种奇怪的行为奋斗了一个多月,但终于通过反复试验找出了解释。
当您从Eclipse启动应用程序时,从命令行启动应用程序时,或者如果您安装应用程序,并按下“打开”按钮(而不是“完成”按钮)以在安装应用程序之后立即启动该应用程序,则会发生此行为。
如果在其中一种情况下,您开始申请,请转到Activity1,然后转到Activity 2,按HOME按钮,然后按应用程序图标,它将打开一个新的Activity1实例。 不要听我的话。 只需按下BACK,就可以看到当您按HOME时您离开的Activity2。
看起来,如果应用程序是以上述方式之一启动的,则启动器活动不会放在活动堆栈上,这就是为什么它会在应用程序堆栈的当前活动之上创建启动器活动的新实例。 这看起来像一个错误。
所以,解决方法是退出应用程序,第一次从Eclipse或命令行或Open按钮等启动时,通过按BACK按钮多次按需要,然后再次输入应用程序。 从那时起,行为将如预期的那样。
编辑:更好的解决方法是:创建一个DummyActivity并将其设置为应用程序的主入口点。 另外,添加标志android:noHistory="true"
。 DummyActivity
很简单,看起来像这样:
公共类DummyActivity扩展活动{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!MyApplication.startedApp) {
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
}
finish();
} }
MyApplication
是一个扩展android.app.Application的类,在AndroidManifest.xml中定义。 在HomeActivity.class
您在onCreate()
方法中设置布尔值字段startedApp
为true。 如果用户从屏幕按下BACK,则需要将startedApp的值移至false。
公共类HomeActivity扩展活动{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.startedApp = true;
}
@Override
public void onBackPressed() {
MacawApplication.startedApp = false;
super.onBackPressed();
}
}
所以,第一次启动应用程序时,它会进入if块并在我们的应用程序中启动第一个真正的活动。 如果你浏览应用程序,然后按主页,然后再次启动应用程序, DummyActivity
将被调用第二次,它会自己调用finish()
,应用程序将显示最后一个活动,然后按下HOME。
按下主页键后,平台是否保持任何历史记录?
是。 当启动/完成时的活动被推送到/从历史堆栈中弹出/弹出。
我们如何让用户参与重新启动应用程序的最后一次启动活动?
AFAICT,这应该是默认行为。 当您重新启动应用程序时,除非您更改堆栈,否则将被带到堆栈中的最后一个活动。
阅读详情:应用基础 - 活动和任务
这是Android操作系统的一个错误。
请执行以下步骤。
1)删除你的应用程序并重新安装。
2)安装应用程序后,它会显示两个选项“完成”和“打开”点击完成按钮。
3)现在从应用程序菜单打开应用程序。 你的问题将得到解决。
当按下HOME按钮时,应用程序将从其离开的状态开始。
链接地址: http://www.djcxy.com/p/4451.html