【问题标题】:Android Process Killed - is CookieManager instance killed?Android Process Killed - CookieManager 实例是否被杀死?
【发布时间】:2013-12-12 20:58:14
【问题描述】:
Even though the android process is killed,the activity stack is maintained.

For Example: 我在我的应用程序中跨越了四个屏幕,cookie 存储在CookieManager 中。现在我按下主页按钮,android 终止进程。由于进程被终止,android CookieManager 实例也被终止(所有存储的 cookie 都被删除)。 当我恢复到应用程序时,它从我离开的活动开始,但现在不再有 cookie。

Possible solutions: (Considering Html(WebView) + android is used in app)
  1. 需要在持久化存储中维护 cookie。(不依赖于 Android CookieManager)。 Challenges:

    webview 使用 cookieManager 来存储它的 cookie。我们需要将我们的 cookie 与 webView cookie(存储在 cookie 管理器中的 cookie)同步。

    何时删除所有持久化 cookie。我们是否有任何针对应用程序退出的 android 特定回调?

  2. 如果进程被终止,则从开始(从建立 cookie 的位置)重新启动应用程序。 Possibile Soln: Android Application 类的 oncreate 会在新进程启动时被调用 created.那个时间点,我们就可以从启动应用启动了。

    有没有更好的解决方案?

如果我们要实现一个自定义类来维护 cookie,那么使用 android CookieManager 有什么意义?

【问题讨论】:

  • 按主页按钮通常不会杀死进程!
  • 通常android不会在我们按下home键的时候杀死进程。但是当android需要杀死进程时,与前台进程相比,android给后台进程的优先级较低。这就是我的意思。跨度>

标签: android memory-management process android-cookiemanager


【解决方案1】:

我在我的应用程序中跨越了四个屏幕,cookie 存储在 cookie 管理器中。

我将假设这个“Cookie 管理器”是一个静态数据成员。

现在我正在按下主页按钮。现在该进程已被终止。然后存储的 Cookies 也将被删除。

当进程终止时,“Cookie 管理器”将连同内存中的所有其他对象一起消失。

如果是这样,我们如何保持应用程序的一致性。由于进程被杀死,但应用程序正在从我们离开的活动中恢复,因此曾经存储的 Cookies 已被删除。

将 cookie 保存在持久存储中,例如文件、数据库或 SharedPreferences。或者,如果 cookie 的总大小很小,并且对您的应用程序来说合乎逻辑,则让它们成为通过 onSaveInstanceState() 传递给您的活动和片段的 Bundle 的一部分。

【讨论】:

  • @ChrisStratton:说得好。在我的脑海中,我不记得CookieManager 是否保留非会话 cookie。 OP 将需要重新加载 WebView 中的内容,因为旧的 WebView 已随旧进程消失,因此 OP 可能需要将用户引导到“前门” cookie 已建立。最好通过<activity> 标志处理还是仅在应用内处理,这可能在一定程度上取决于应用本身。
猜你喜欢
  • 2020-11-23
  • 2017-11-09
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
相关资源
最近更新 更多