【问题标题】:onBackPressed - avoid destroying activityonBackPressed - 避免破坏活动
【发布时间】:2013-03-25 21:25:54
【问题描述】:

我有两个活动 - 活动 A 启动活动 B。然后活动 B 从数据库加载一些内容,并可视化数据。完全初始化 B 中的所有东西需要一些时间(5-10 秒)。

我的问题是,如果我在 B 中按下返回按钮,它会破坏 B 活动(调用 onDestroy)并返回活动 A。我仍然想返回活动 A,但 不破坏 B,因为如果我再次启动 B,我必须在它完成所有工作之前再次等待(这很烦人)。这有可能吗?

感谢您的帮助!

【问题讨论】:

    标签: android android-activity activity-lifecycle


    【解决方案1】:

    你可以使用Fragments,但你真正想做的是缓存信息。否则无论如何你都会重新加载设备旋转(除非你使用 Fragments 和 setRetainInstance 为真,但这可能会导致其他问题)。

    我会在活动 B 的 onCreate 上使用 CursorLoaderonLoadFinished 你缓存结果并设置你的 UI。在随后的加载中,结果被缓存并且您放弃加载器。更重要的是,如果底层数据库结果发生变化,使用CursorLoader 会提醒您。

    【讨论】:

    • 这是正确的答案,作为@Orabîg 的一员,您将永远无法要求android 保持活动的活力。 Android 可以在内存压力下对任何活动进行垃圾收集。
    • 谢谢,我会研究 Fragments。我知道我不能强迫 android 不终止活动。我只是希望你回到 A 和你想再次去 B 几分钟后的平均情况......
    • 同样,片段甚至可能不起作用,如果它们起作用,它们会带来一些你应该很清楚的微妙之处。请参阅 developer.android.com/reference/android/app/… 我更愿意建议您查看 Loaders。
    • 您还需要处理屏幕方向。即使在那种情况下,活动也会被销毁并重新创建。
    • @Raghunandan:谢谢,我知道了。但我不认为方向会经常改变,我关心的是平均情况..
    【解决方案2】:

    我认为你没有从正确的角度看待问题。

    我想说,如果 Android 愿意,您无法阻止 B 被销毁(因为由它来处理活动)。 但是,您可以选择将所有长时间初始化移动到可以一直保留的第三类中。所以你应该让这个初始化阶段独立于你的 B 活动。

    我认为将所有这些都放在 Application 类的属性中是个好主意。

    【讨论】:

    • 谢谢,但我不想管理第三类,我会暂时保留初始化数据,因为有更多的 B 实例具有不同的数据(并且数据会定期更新)所以它会很复杂……
    • 随心所欲,但我认为你不会有太多选择。而且我不明白你的论点解释你不能使用外部类。我希望您能找到最适合您的解决方案。
    【解决方案3】:

    也许你可以使用AndroidFragments

    【讨论】:

      【解决方案4】:

      使用 SharedPreferences 存储键值对,然后使用 getSharedPreferences() 检索它们。

      【讨论】:

        【解决方案5】:

        当你按下返回按钮时,Activity b 被销毁。这就是安卓的工作方式。我不会尝试覆盖默认功能

        一旦您从数据库中获取数据,您就可以在某个地方缓存并加载它。

        http://developer.android.com/guide/topics/data/data-storage.html。检查保存缓存文件下的主题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-29
          相关资源
          最近更新 更多