【问题标题】:How can I do some cleanup right before an Android app is quitting?如何在 Android 应用程序退出之前进行一些清理?
【发布时间】:2011-12-16 23:45:18
【问题描述】:

当我的 Android 应用程序终止时,是否有某种 onTerminate() 方法可以让我进行一些清理(我想清除一些 SharedPreferences)?

我有一个活动保持几个数字的运行平均值,我将其存储在 SharedPreference 中。我希望这个平均值在应用程序运行时持续(用户可以在不同的活动之间移动),所以我无法在 onDestroy() 上为该特定活动清除它。一旦应用程序即将退出,我需要能够清除它。

我该怎么做?

【问题讨论】:

  • 考虑到在应用关闭之前不能保证除了onPause() 之外的任何事件.. android 是否支持Runtime.addShutdownHook 并且它是否像您期望的那样工作?
  • 只要至少有一项活动还存在,您是否希望您的运行平均值不清晰?如果您点击主页按钮,应该立即清除平均值还是仅在操作系统最终杀死您的活动时才清除?如果用户只是重新开始您的主要活动,您可以清除偏好吗?如果您只希望这些平均值在您的应用运行时持续存在,您是否考虑过使用服务?

标签: java android sharedpreferences android-activity


【解决方案1】:

我没有尝试过,但我会这样做:

  • 正如 Alex 在对原始问题的评论中提到的,使用 ServiceActivities 之间共享应用范围的状态。
  • 每当您在Activities 之间移动时,从“新”活动绑定到服务,并从“旧”活动取消绑定。查看this,了解如何协调活动。
  • 如果您正确地遵循这一点,您可以确保只要您的应用程序正在运行,至少有一个Activity 始终绑定到Service;并且当应用程序不再运行时所有活动都未绑定-此时调用您的服务的onDestroy()。这是您执行清理的地方。

【讨论】:

    【解决方案2】:

    所以 android 并没有真正的应用程序“完成”的概念。不幸的是,没有什么是“onTerminate()”的同义词。是否有一些标准可以让您决定何时清除运行平均值?

    【讨论】:

    • 我猜如果应用程序进入主屏幕,我可以认为它“已终止”,虽然有些极端情况会认为这是无效的,但我愿意例外......
    • 实际上在android.app.Application 类中确实存在一个onTerminate 方法.. 但是在这种情况下它是无用的,因为它只在模拟过程环境中调用,而不会在实际设备上调用。
    【解决方案3】:

    使用SharedPreference.Editor 删除首选项并提交。这是给你的链接:http://developer.android.com/reference/android/content/SharedPreferences.Editor.html

    【讨论】:

    • 这根本不是他要问的。
    • 我知道如何删除首选项,我只需要弄清楚何时删除它。
    猜你喜欢
    • 2011-02-10
    • 2013-09-14
    • 1970-01-01
    • 2016-05-29
    • 2023-03-19
    • 2012-12-11
    • 2021-07-30
    相关资源
    最近更新 更多