【问题标题】:Detect when application is closed检测应用程序何时关闭
【发布时间】:2012-05-10 09:27:35
【问题描述】:

我想知道应用程序何时关闭,因为我需要在用户关闭应用程序时擦除数据库,就在用户关闭应用程序的那一刻是擦除SQLite数据库的正确时机,我该怎么做检测到这个?

【问题讨论】:

  • 是的,我知道,但问题是,我需要知道整个应用程序何时关闭,而不是活动何时关闭。
  • 你想要的都是不可能的。您的进程可能随时由用户或操作系统终止,您不会收到通知。
  • @CommonsWare 您似乎非常了解Android Stack,是否可以将Application.ActivityLifecycleCallbacks 附加到Application 类并监听onActivityDestroyed(Activity 活动) 或Application 类的任何终止本身? (只是想知道)
  • @FeleMed:Application 永远不会终止。该过程刚刚结束。 onTerminate() 方法永远不会被调用,也不会被调用。

标签: android android-activity detect


【解决方案1】:

这是一个有缺陷的设计理念,它反映了对系统的误解——当整个进程死亡时,它就死了,这意味着你的代码不再运行。

出于礼貌,您可以进行一些跟踪并让最后一个 onDestory() 的活动进行清理,但不要假设它总是会实际发生(该方法不会总是调用)。如果有一个过时的副本是个问题,请在下次运行时清理它。

也就是说,您可以尝试使用 ndk 为进程终止信号提供处理程序,但我仍然不能指望它在所有情况下都能正常工作。除非您已经熟悉所涉及的概念,否则从中获得任何健全功能的有限潜力可能不值得付出努力。

并且不要为安全机制清理一分钟错误,因为该文件在您的应用运行时就在那里,并且如果您的应用以意外方式终止,该文件仍将保留。

【讨论】:

  • “如果有一个过时的副本是个问题,请在下次运行时清理它。” - 谢谢,很好的建议
【解决方案2】:

假设您没有finish() 您的主要活动,那么在该活动的onDestroy() 方法中清除您的数据库可能是您想要完成的最接近的事情。正如 cmets 中所指出的,请参阅 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

【讨论】:

  • onDestroy() 有时似乎不起作用,android 只是跳过执行 onDestry() 方法。
  • 鼓励使用onPause(),因为onDestroy() 的执行不是100% 可靠的(它取决于系统资源)
  • 但这会在每次设备旋转时清除数据库
猜你喜欢
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
相关资源
最近更新 更多