在过渡到新的活动期间重新创建活动

时间:2017-04-19 09:56:43

标签: android activity-lifecycle

在我开发的App中,我有2项活动, ActA ActB

ActA是第一个被展示的人。

我们可以说 ActA 就像SplashScreen一样。

ActA 内部,我会在 ActB 中检索一些数据,以执行某些任务。

当这些数据被重新启动时,我可以调用一个Intent来执行切换到 ActB

问题在于: ActB 扩展 ActA ,因为它需要 ActA 重新审核的数据来执行其任务。

可能就是这样,在 ActB 被调用的那一刻, ActA 方法" OnCreate"被叫到。

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

我如何禁止ActA第二次开始?

4 个答案:

答案 0 :(得分:1)

如果您不想在活动之间交换数据,您可以这样做 创建一个这样的基本活动:

    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
    }

答案 1 :(得分:0)

您可以通过意图将检索到的数据从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?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

首先,您需要了解您的OOP概念。

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

  

问题在于: ActB 扩展 ActA ,因为它需要 ActA 检索到的数据来执行它的任务。

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

接下来,我假设(因为您没有提供任何代码)您已经编写了代码,该代码在 ActA onCreate()中开始 ActB 方法,这就是问题的原因

  

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

请注意,由于您的结构,首次启动 ActB 时,它是检索数据并调用自身的而不是的ActA

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

e.g。检索some_data

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

以及需要数据的 ActB

Intent i = getIntent();

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

它会起作用。

请参阅@Malik的回答。