我已经为这种奇怪的行为苦苦挣扎了一个多月,但我终于通过反复试验找到了原因。
当您从 Eclipse、命令行启动应用程序或安装应用程序并在安装后立即按“打开”按钮(而不是“完成”按钮)启动应用程序时,会发生此行为。
如果在其中一种情况下,您启动应用程序,转到 Activity1,然后转到 Activity 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。
公共类 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 之前的最后一个活动。