【问题标题】:Android application lifecycle confusionAndroid应用生命周期混乱
【发布时间】:2012-04-02 19:03:22
【问题描述】:

我有一个重复使用 Activity 次数未知的应用程序。它运行

a> b1||c1 > b2|| c2 > ...

如果我去 a > b1 > b2 > b1,我的应用程序仍然在屏幕上显示 b1 列表,但如果我点击它,它会将我带到相应的 b2 活动。我用来保存 b 数据的 arrayList 需要为 b 的正确实例恢复。

我一直在阅读http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle 但我不认为 onPause 和 onResume 会起作用,因为我再次使用相同的活动。

【问题讨论】:

    标签: android android-lifecycle activity-lifecycle application-lifecycle


    【解决方案1】:

    这完全取决于您在活动之间移动的方式。

    当您按下或执行finish() 时,您会破坏您的活动。我相信在这种情况下,您在 b2 上执行 finish(),然后您返回 b1。

    将活动想象成一个包含您的实例活动的堆栈。您的堆栈中可以有多个相同活动的实例。

    当你在 a 并且你去 b1 时,你的堆栈保持这样:

    b1
    a
    

    当你去 b2 时,你的堆栈变成这样

    b2
    b1
    a
    

    如果你为 b1 再做一次startActivity(),你会得到

    b1
    b2
    b1
    a
    

    但是,如果您执行finish() 或者您按下回击,您实际上会破坏 b2,然后您会回到从 b1 获得的第一个实例。请记住:在堆栈中,您有可以保存不同数据的活动实例。

    【讨论】:

    • 当我在活动 b2 中按回时,它只显示来自 b1 的 ui 列表。实际数据仍然是来自 b2 的数据。假设我在 b1 上有一个 12345 的列表。我打开显示 67890 的 b2。回击并显示为 12345。如果我选​​择一个列表条目来记录当时的数据,比如 3,它会记录 8。来自 b1 的实际数据未恢复。
    • 我不知道您是如何组织数据的。但是,如果您按下堆栈上的顶部活动,则会调用堆栈中下一个活动的onResume()。请检查您的onResume() 以了解您在做什么。还要检查您是否正在对提供信息或适配器的结构进行更改。最后请检查您的信息是否是静态的(因此可以由所有活动共享)或者您的信息是否是本地的(在您的活动中)。
    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多