在开发示例Android应用程序时,我构建了两个活动 1)活动1 2)活动2
现在,活动2是前景活动,而活动1是背景活动。现在用户按Home键。申请(即两项活动)都消失了。现在我们重新启动应用程序,我们将活动1视为前台活动。我的问题是:
1)当按下主页键时,平台是否保留任何历史记录条目? 2)我们如何将用户带到重新启动应用程序的最后一次启动活动?
答案 0 :(得分:18)
我在这个奇怪的行为中挣扎了一个多月,但我终于通过反复试验找到了解释。
当您从Eclipse,命令行启动应用程序或安装应用程序并按下“打开”按钮(而不是“完成”按钮)以在安装后立即启动应用程序时,会发生此行为。
如果在其中一个案例中,您启动了应用程序,请转到Activity1,然后转到活动2,按HOME按钮,然后按应用程序图标,它将打开一个新的Activity1实例。不要相信我的话。只需按BACK即可看到它将您带到按下HOME时离开的Activity2。
如果以上述方式之一启动应用程序,似乎启动器活动没有放在活动堆栈上,这就是为什么它在应用程序堆栈中的当前活动之上创建启动器活动的新实例的原因。这对我来说就像一个错误。
因此,解决方法是退出应用程序,第一次从Eclipse或命令行或打开按钮等启动应用程序,根据需要多次按BACK按钮,然后再次输入应用程序。从那时起,行为将如预期一样。
编辑:
更好的解决方法是:创建DummyActivity并将其设置为应用程序的主要入口点。另外,添加标志android:noHistory="true"
。 DummyActivity
很简单,看起来像这样:
公共类DummyActivity扩展了Activity {
@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。
public class HomeActivity扩展了Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.startedApp = true;
}
@Override
public void onBackPressed() {
MacawApplication.startedApp = false;
super.onBackPressed();
}
}
因此,第一次启动应用程序时,它会进入if块并在我们的应用程序中启动第一个真实活动。如果您浏览应用程序,然后按HOME然后再次启动应用程序,DummyActivity
将再次调用,它将自动调用finish()
,应用程序将显示您之前的最后一个活动按下HOME。
答案 1 :(得分:2)
按下主页时,平台是否保留任何历史记录条目?
是。启动/完成时的活动被推送/弹出到历史堆栈上。
我们如何让用户重新启动上次启动活动 应用
AFAICT,应该是默认行为。重新启动应用程序时,除非更改堆栈,否则将转到堆栈上的最后一个活动。
答案 2 :(得分:1)
这是Android操作系统的错误。
请执行以下步骤。
1)删除您的应用程序并重新安装。
2)安装完应用程序后,它会显示两个选项“Done”& “打开”点击完成按钮。
3)现在从应用程序菜单打开应用程序。你的问题将得到解决。
当按下HOME按钮时,应用程序将从它离开的状态开始。
答案 3 :(得分:0)
我还建议您阅读Activity and Task Design Guidelines。这些是关于按下主页按钮,按下后退按钮时的行为方式的用户界面指南,依此类推。
它不是非常技术性,但它很好地说明了您的应用应该如何表现以及操作系统期望的内容。
答案 4 :(得分:0)
你无法处理Home Button ... Android开发页面说主页按钮更新处理.. 这很容易理解。谢谢你
答案 5 :(得分:0)
活动的启动模式会影响按home后重新启动时的行为。如果第一个活动是作为singletask或singleinstance启动的话,那么它总是第一个将被恢复的活动。
如果使用默认启动模式启动活动,则在重新启动应用程序时,将恢复先前的活动
答案 6 :(得分:0)
当您按下主页按钮时,应用程序将消失,重新启动应用程序时,前台活动将恢复,
原因是它的Android操作系统的行为
答案 7 :(得分:0)
我有类似的问题。它没有启动最后一个打开的活动,而是启动了Launcher Activity。但我也提出了
android:launchMode="singleTask"
在清单中的Launcher活动中。删除修复我的问题。 如果你也放了同样的东西然后尝试删除它,它也可能适合你。