【问题标题】:Why does the main activity restart again after its called intent finished (Android 4.2.2)?为什么主要活动在其调用意图完成后再次重新启动(Android 4.2.2)?
【发布时间】:2013-05-07 16:47:54
【问题描述】:

该应用程序在 Android 2.3.5 中运行良好 但它在 Nexus 4 (Android 4.2.2) 中无法正常工作。

应用程序是: 在主activity的onCreate中,通过intent调用另一个activity。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Intent launchIntent = new Intent(MainActivity.this, AndroidVideoCapture.class);
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(launchIntent);

    // I add a button dynamically here
}

现在使用 Nexus 4,在完成 AndroidVideoCapture 的意图后,它会返回到 onCreate 的开头“setContentView(R.layout.activity_main);”。 所以意图一次又一次地重新启动。

为什么?

【问题讨论】:

    标签: android android-intent nexus-4


    【解决方案1】:

    您可以检查您是否在 nexus 4 设备的开发者选项中启用了“不保留活动”。如果选中,请禁用它。这是一个仅从 4.0 开始可用的选项,这就是您的父活动被“重新创建”的原因。

    【讨论】:

    • 我可以知道为什么它被设计为“重新创建”吗?
    • 这纯粹是一个开发人员选项,可帮助您验证是否 1. 您已保存活动的状态,在它进入后台之前。 2. 正确处理内存不足的情况(在这种情况下,Activity 将被销毁。)现在由于它被销毁,它正在被重新创建,以使您看起来 Activity Stack 是完整的。
    【解决方案2】:

    尝试添加

    if (savedInstanceState == null) {
        final Intent launchIntent = new Intent(MainActivity.this, AndroidVideoCapture.class);
        launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(launchIntent);
    }
    

    savedInstanceState 不为 null 表示正在重新创建活动。

    【讨论】:

    • 谢谢!有用!但是不知Android 2.3.5到4.2.2发生了什么,所以我们需要添加saveInstanceState?
    • 这可能与更严格的内存管理有关。 Android 4.2.2 自己使用更多 RAM,因此应用程序可用的内存更少,并且暂停活动以释放 RAM。
    • 此外,一般而言,Android 不承诺您的活动在不可见时不会被销毁。所以你真的不应该假设它,即使它有时(或大部分时间)有效,因为它可能在不同的设备上表现不同,或者如果用户在内存中有不同的设置或应用程序。
    • 但这不仅与儿童活动有关。我的父活动正在重新创建。
    猜你喜欢
    • 2021-10-22
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多