Activity 在过渡到新的过程中被重新创建

Activity gets re-created during the transition to a new one

在我正在开发的应用程序中,我有 2 个活动,ActAActB

ActA 是第一个显示的。

我们可以说 ActA 像 SplashScreen 一样工作。

ActA 中,我检索了一些我在 ActB 中执行某些任务所需的数据。

检索到此数据后,我可以调用执行切换到 ActB.

的 Intent

问题来了: ActB 扩展了 ActA 因为它需要 ActA 检索数据来执行他的任务。

可能正因为如此,在 ActB 被调用的那一刻,ActA 方法 "OnCreate" 被调用。

这会创建一个循环,因为 ActA 开始检索其他数据并再次调用 ActB。所以我的应用程序崩溃了。

如何禁止ActA再次启动?

您可以通过意图将检索到的数据从 ActA 传递到 ActB,就像这样

Intent i = new Intent(getActivity(), ActB.class);
i.putExtra("String1", "foo");
i.putExtra("Integer1", "1337");
startActivity(i);

然后在您的 ActB 中,您像这样查看数据:

Intent i = getIntent();
String foo = i.getStringExtra("String1");
Integer leet = i.getStringExtra("Integer1");

如果要传递自定义对象,请参考How to send an object from one Android Activity to another using Intents?

如果您不想在 Activity 之间交换数据,您可以这样做。
像这样创建一个基础activity:

    class BaseActivity extends Activity{
      String data;
    }

    Now class ActA extends BaseActivity{
    //you can put value to data directly
    data="ABCD";
    }

    class ActB extends BaseActivity{
    //Here you can access the data string directly
    }

发生这种情况是因为ActB 的onCreate() 方法正在调用super(),它导致一次又一次地调用ActA 的onCreate() 方法。所以,最好不要在 ActB 中扩展 ActA。 您可以通过从 ActA 到 ActB 的传递意图传递这些值。

首先,您需要温习一下 OOP 概念。

正如你所说 ActA 更像是 SplashScreen,所以我假设 ActBMainScreen.您不应该 extend ActA 来创建 ActB。他们之间没有Is-A关系

Here's the problem: ActB extends ActA because it needs ActA's retrieved data to perform it's tasks.

您出于非常错误的原因延长了 ActA

展望未来,我假设(因为您没有提供任何代码)您已经编写了在 ActA[=63= 中开始 ActB 的代码]的onCreate()方法,这就是问题

的原因

This creates a loop because ActA starts retrieving other data and calls again ActB. So my app crashes.

请注意,由于您的结构,一旦 ActB 第一次启动,它就是检索数据并调用自身的那个 而不是 ActA.

请删除继承并使用 Intent.putExtra(key, value) 方法 (docs) 将数据从 ActA 传递到 ActB .

例如在 ActA 检索后 some_data

Intent i = new Intent(ActA.this, ActB.class);
i.putExtra("some_key", some_data);
ActA.this.startActivity(i);

并且在 ActB 中需要数据

Intent i = getIntent();

并使用适当的 API Intent.get<TYPE>Extra()i 检索 some_data,例如i.getIntExtra("some_key")(docs)

它会起作用。

另请参考@Malik 的回答。