Cat*_*san 18
我已经在这个奇怪的行为中挣扎了一个多月,但我终于通过反复试验找到了解释.
当您从Eclipse,命令行启动应用程序或安装应用程序并按下"打开"按钮(而不是"完成"按钮)以在安装后立即启动应用程序时,会发生此行为.
如果在其中一种情况下,您启动应用程序,请转到Activity1,然后转到活动2,按HOME按钮,然后按应用程序图标,它将打开一个新的Activity1实例.不要相信我的话.只需按BACK即可看到它将您带到按下HOME时离开的Activity2.
如果应用程序以上述方式之一启动,似乎启动器活动没有放在活动堆栈上,这就是为什么它在应用程序堆栈中的当前活动之上创建启动器活动的新实例的原因.这对我来说就像一个bug.
因此,解决方法是退出应用程序,第一次从Eclipse或命令行或打开按钮等启动时,根据需要多次按BACK按钮,然后再次进入应用程序.从那时起,行为将如预期一样.
编辑:一个更好的解决方法是:创建一个DummyActivity并将其设置为应用程序的主要入口点.另外,添加标志android:noHistory="true".在DummyActivity简单是这样的:
公共类DummyActivity扩展Activity {
Run Code Online (Sandbox Code Playgroud)@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();
}
Run Code Online (Sandbox Code Playgroud)
}
因此,第一次启动应用程序时,它会进入if块并在我们的应用程序中启动第一个真实活动.如果您浏览应用程序,然后按HOME然后再次启动应用程序,DummyActivity将再次调用它,它将finish()自行调用,应用程序将显示您按HOME之前的最后一个活动.
当按下主页键时,平台是否保留任何历史记录?
是的。启动/完成时的活动将被推送到历史堆栈中/从历史堆栈中弹出。
重新启动应用程序时,我们如何将用户带到上次启动活动?
AFAICT,这应该是默认行为。当您重新启动应用程序时,除非您更改堆栈,否则您将被带到堆栈上的最后一个活动。
了解详细信息,请阅读:应用程序基础知识 - 活动和任务