-1

我有一个带有 2 个主要活动的 Android 应用程序。当应用程序从头开始时,两个活动都可以正常启动和运行。类似于:A -> B。活动 A 完成了 A 和 B 所需的所有初始化。我在真实硬件和模拟器上进行的所有本地测试,A 总是在创建 B 之前创建(onCreate)。

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

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

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

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

2 回答 2

1

启动 Activity B 后,您按下主页按钮并将您的应用程序置于后台。如果可用内存非常低,系统会终止您的应用程序。如果您在应用程序终止后尝试切换到您的应用程序,系统将尝试恢复您的应用程序和活动 B,而无需先创建 A。

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

于 2012-12-12T03:48:52.327 回答
0

就您而言,我建议您使用单个活动。在创建时,您可以准备好一切,然后做您需要的事情。如果您想确保某些内容只有在其他内容完成后才会执行,请使用 AsyncTasks。

在 doInBackground => 中进行初始化和 onPostExecute,然后执行您必须执行的操作。

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

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

编辑:

您的结构不尊重 Android 中的良好编程习惯,但如果您必须保持这种结构,您至少应该为活动 A 使用“无法杀死”的服务。这将使您的代码更难作为一个简单的活动被破坏当您的应用程序将被置于后台,但仍有机会被销毁时。

要了解您的问题,请参阅 android 活动生命周期:

在此处输入图像描述

有关使用的服务,请参阅:

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

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

于 2012-12-11T16:52:49.380 回答