【问题标题】:How to save state in Android onPause using android HttpRequest如何使用android HttpRequest在Android onPause中保存状态
【发布时间】:2013-02-10 16:48:37
【问题描述】:

我对 Android 生命周期模型的理解是,当调用 onPause() 时,我应该保存任何需要保存的状态,因为我的应用程序可能在我返回后的任何时候终止。我的目标是 Gingerbread,所以 onStop 可能永远不会被调用。

但是,在我的应用程序中,某些状态被保存在远程服务器上。我会定期刷新此状态,但如果调用 onPause 我不确定正确的做法,因为我的理解是一旦 onPause 返回我的应用程序可能会被杀死。由于我必须在另一个线程中运行 android http 请求,这似乎有问题:如果我在 onPause 中启动请求然后返回,那么我的应用程序可能会在保存状态的远程请求完成(甚至启动!)之前被终止。

我在想我应该在我睡觉并等待请求工作的地方进行某种同步,但首先我不确定我什至可以在 onPause 中做到这一点,其次,onPause 不应该需要很长时间才能完成,因此如果存在网络延迟,这也可能会导致问题。

当需要将状态刷新到远程服务器或通常通过某种需要单独线程的方法时,是否有一些推荐的方法在 onPause 中保存状态?

【问题讨论】:

    标签: android http android-lifecycle onpause


    【解决方案1】:

    当状态需要刷新到远程服务器时,推荐在 onPause 中保存状态的方式:

    在 OnPause 中启动服务(Android 服务)并将您的状态从该服务刷新到服务器,并在完成所需任务后关闭该服务。

    【讨论】:

    • 真的可以这么简单吗?我已经有一项服务,我正在做我的正常冲洗。我担心的是,由于我的服务与 Activity 属于同一进程的一部分,因此该服务可能会被该 Activity 杀死。
    • @Michael 永远记住服务不会随着您的活动而关闭(正常情况下,这并不意味着如果 UI 即活动被杀死并不意味着您的应用程序也被杀死)。 “并且正因为如此,您应该始终在完成所需任务后将其关闭 -*(当且仅当您的应用程序中的任何其他组件或通过来自不同进程的 AIDL 使用它的任何其他应用程序都没有使用它时)”
    • Service 与 Activity 处于同一进程中,至少在我的情况下是这样,因为我可以直接调用静态函数。操作系统如何只杀死释放资源的活动而不同时杀死服务?
    • 这并没有解释如果同一个进程中的Activity被杀死,Service是如何不被杀死的。或许 Android 杀死进程的含义与底层操作系统不同,例如“释放 Activity 对象”?
    • 好的 实际看一下。在一个重新服务中,服务员是活动(UI),厨师是服务(在后台工作,不可见)......所以如果你下达了一些订单并且服务员转发了烹饪的订单。现在服务员离开了你的桌子(比如屏幕上的活动),所以厨师会停止表演吗?不。因为如果 UI 上没有任何内容并不意味着您的整个过程应该停止..
    【解决方案2】:

    不完全确定你在做什么,但是

    您可以将您的 HttpRequest 放入 Service,当您从这里生成一个线程时,当您的活动点击的 onPause 时,它​​不会被杀死。

    然后,您可以使用BroadcastReciever 回调您的应用,如果尚未启动,这将启动您的 Activity。

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      相关资源
      最近更新 更多