【问题标题】:What happens to the code when someone closes or kills an app?当有人关闭或杀死应用程序时,代码会发生什么?
【发布时间】:2015-06-29 10:41:12
【问题描述】:

我一直在研究为我的应用程序存储数据,并尝试在不同的方法(onSaveInstanceStateonPause/onResume)和不同的存储方法(onSaveInstanceState、SQLitePrefences 中的状态)之间进行选择。

我很好奇当用户做某些事情时,这些存储方法中的每一种会发生什么。具体来说,我想知道调用了哪些方法以及何时擦除了哪些数据:

  • 用户单击任务切换器按钮(右下角),然后在几秒钟内关闭覆盖,所有操作均在应用内完成
  • 用户在没有从任务切换器中滑出应用程序的情况下单击主页,然后重新打开应用程序
  • 用户点击主页,从任务切换器中滑出应用程序,然后重新打开应用程序
  • 用户退出应用,重启手机,然后打开应用
  • 用户退出应用,并使用Clean Master(或任何其他存储管理器)清除所有应用的缓存或杀死所有后台任务,然后重新打开应用。
  • 用户更新应用

【问题讨论】:

  • 请指定您将制作的应用类型以及您将存储的数据类型。告诉你“在这些过程中究竟调用了哪些方法”否则将花费太多时间。您的特定用例将推动架构的选择,而您的架构将推动您需要使用的回调的选择。
  • @StephanBranczyk 这是个好主意;我正在尝试存储高分。目前我只是使用 savedpreferences 并将 5-6 个数字放在编辑器中,提交并继续。可能有更有效的方法,这就是为什么我在上面详细阐述了不同的可能性。

标签: android database sqlite state android-savedstate


【解决方案1】:

我正在尝试存储高分。目前我只是在使用 保存偏好并将 5-6 个数字放入编辑器中,提交,然后 继续。可能有更有效的方法,这就是为什么我 上面详细阐述了不同的可能性。

我假设您的意思是 SharedPreferences。是的,你做对了。您的高分将在应用程序执行之间保存。并且对 SQLite 做同样的事情就太过分了。

用户清除数据的唯一方法是点击Clear the Data或点击Uninstall您的应用程序

但是,无论是更新应用程序本身,还是点击 Clear the cache 都不会对 SharedPreferences 做任何事情,如果用户想要特定的内容,则必须按下该按钮“清除数据”要清除的数据。

至于更有效的方法,这取决于您的意思。你正在做的是几乎每个开发人员都会做的事情。这是实际工作的最简单的解决方案。例如,如果您选择在活动之间将这些数据存储在捆绑包中,那么所有高分数据将在应用执行之间丢失。

话虽如此,如果您要在多台设备上玩同一个游戏,或者要迁移到新设备,或者要卸载游戏并稍后重新安装,那么您的解决方案显然是不够的时间。为此,您可能需要考虑使用Google Play Services 在本地和云端为您存储该数据。

【讨论】:

    【解决方案2】:
    1. 当用户转到任务切换器并关闭应用程序时,应用程序进程将被终止,并且在后台运行的所有服务也将停止
    2. 当用户单击主页,而不从任务切换器中滑出并重新打开应用程序时,应用程序正在恢复。如果您搜索活动生命周期,您可以获得更多详细信息
    3. 当用户点击home并从任务切换器中刷出应用程序时,相当于杀死应用程序,进程将被杀死,所有在后台运行的服务也将停止
    4. 当用户退出应用并restarts.reboots 手机时,进程被终止,服务也将被终止。但是在重启/重启设备后,一旦设备重启或应用程序被终止,用户就会编写逻辑来重启它
    5. 当用户退出应用程序并清除缓存时,我会假设数据已被清除。所以这就像一个新的应用程序。

    根据我的理解,我已经给出了简短的回答。希望这能提供一些见解。

    【讨论】:

    • #1、#3、#4 不正确:从最近使用的应用程序(Google 现在称之为屏幕)中删除应用程序将不会停止任何服务。它只会从屏幕上删除应用程序,并可能释放活动使用的内存。这就是为什么即使在刷掉 GMaill 之后,您仍然可以收到新的电子邮件通知。自行“退出”应用程序不会导致进程被终止。
    • 虽然这个答案肯定很有用,但我一直在寻找更具体的东西:这些过程中究竟调用了哪些方法。
    • #5 我相信也可能不正确。很多人清除缓存,比如Reddit - Clean Master Functions Thread,似乎并没有清除他们的数据。
    • @JoeBob,忽略上面的答案。反正大部分都是不正确的。也没有提到#6,但如果数据存储在 SQLite 中,即使在应用程序本身更新后(即使架构已更改,假设开发人员希望它更改),数据仍然存在。
    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多