2012-12-11 44 views
-1

我有一个包含2个主要活动的Android应用程序。当应用程序从头开始时,两个活动都会启动并运行得很好。例如:A - > B。活动A完成A & B所需的所有初始化。在创建B之前,我始终创建了(onCreate)所有在真实硬件和仿真器上的本地测试。Android Activity stack onCreate order

但是,在我的应用程序的崩溃报告中,我看到一个异常,只能通过B在没有或在A之前启动来解释。这可能吗? Android会创建一个内部活动,而不会为我的应用创建其他活动(B没有A)?活动创建的顺序是否保证(A然后是B)?我将如何使用模拟器或真实硬件重新创建这些场景中的任何一个?

无论首先启动哪个Activity,我都可以轻松地将我的初始化代码移动到工作位置,但是我想在进行更改之前学习如何重现和测试。我浏览了文档,但它并没有真正的帮助。

这里是启动任务B,当用户按下代码“播放”按钮:

private void handlePlayTouch() 
{ 
    Intent intent = new Intent(getApplicationContext(), PlayActivity.class); 
    startActivity(intent);  
} 
+0

如果您在按主页按钮后(也可能在调用onStop()之后恢复应用程序),它将不会恢复活动A的原始状态。在任何情况下,每个活动都应该是完整的。 – Estel

+0

你怎么一次开始两个活动?向我们展示一些代码! – theomega

+0

当用户按下一个按钮时,活动B开始,该按钮将应用程序从“主屏幕”导航到“主屏幕”。 – raider33

回答

1

后,你开始活动B,你按回家的按钮,并在你的应用程序 背景。如果可用内存非常低,系统会终止您的应用程序。如果您在应用程序终止后尝试切换到您的应用程序,系统会尝试恢复您的应用程序和活动B,而不先创建A。

您可以使用DDMMS的设备视图来手动停止您的应用程序,并有一个红色的“停止进程”按钮。确保您应该在后台制作应用程序。

+0

我从来没有听说过DDMS,所以谢谢你提供的信息。我会尝试使用它,如果我能重现这个问题,我会接受这个答案。 – raider33

+0

我运行DDMS并能够像在崩溃报告中看到的堆栈跟踪一样重现错误。而且,一旦我移动了初始化代码,现在一切正常。 – raider33

0

在你的情况,我建议你使用一个单一的活动。在创造中,你可以准备好一切,然后做你所需要的。如果你想确定某些事情只有在其他事情完成时才会执行,请使用AsyncTasks。

在doInBackground =>做初始化和onPostExecute,做你以后要做的事情。

只有在doInBackground完成时,才会执行onPostExecute。

http://developer.android.com/reference/android/os/AsyncTask.html

编辑:

您的结构是不尊重在Android的一个良好的编程习惯,但如果它是强制性的,你把这个结构,你至少应该用“不可杀死”为服务活动A.这会让你的代码更难作为一个简单的活动销毁,当你的应用程序被放置在背景上时,但仍然有机会被销毁。

要了解你的问题,看到了Android活动的生命周期:

enter image description here

对于使用服务,请参见:

http://developer.android.com/reference/android/app/Service.html

http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/

+0

我想保持活动的结构,因为他们目前是。就像帖子所说,我不介意移动初始化代码,以便任何一个Activity都可以初始化它自己。主要我想知道如果B可以重新启动没有A. – raider33

+0

Oj,请参阅编辑的答案。没有提供任何代码,我无法给你更多的细节。 –