当有人关闭或终止应用程序时,代码会发生什么变化?
What happens to the code when someone closes or kills an app?
我一直在考虑为我的应用程序存储数据并尝试在不同的方法之间进行选择 (onSaveInstanceState, onPause/onResume) and different methods of storing(states in onSaveInstanceState, SQLite, Prefences)。
我很好奇当用户做某些事情时,这些存储方法中的每一种会发生什么。具体来说,我想知道在以下情况下调用了哪些方法以及擦除了哪些数据:
- 用户单击任务切换器按钮(右下角),然后在几秒钟内关闭叠加层,所有操作均在应用程序内完成
- 用户在没有从任务切换器中滑出应用程序的情况下单击主页,然后重新打开应用程序
- 用户点击主页,从任务切换器中滑出应用,然后重新打开应用
- 用户退出应用程序,重新启动 phone,然后打开应用程序
- 用户退出应用程序,并使用Clean Master(或任何其他存储管理器)清除所有应用程序的缓存或终止所有后台任务,然后重新打开应用程序。
- 用户更新应用程序
- 当用户转到任务切换器并关闭应用程序时,应用程序进程将被终止,后台的所有服务运行也将停止
- 当用户点击主页,而不是从任务切换器中滑出并重新打开应用程序时,应用程序将恢复。如果您搜索 activity lifecycle
,您可以获得更多详细信息
- 当用户点击主页,从任务切换器中滑出应用时,相当于杀掉应用,进程会被杀掉,后台的所有服务运行也会停止
- 当用户退出应用程序并 restarts.reboots phone 时,进程被终止,服务也将被终止。但是在 restarting/rebooting 设备之后,一旦设备重启或应用程序被终止,用户将编写逻辑来重启它
- 当用户退出应用程序并清除缓存时,我认为数据已被清除。所以这就像一个新的应用程序。
根据我的理解,我已经给出了我的简要回答。希望这能提供一些见解。
I'm trying to store highscores. Currently i'm just using
savedpreferences and putting 5-6 numbers in an editor, committing, and
continuing. there might be a more efficient method, which is why I
elaborated on different possibilities above.
我假设您指的是 SharedPreferences。是的,您的做法是正确的。您的高分将在应用程序执行之间保存。对 SQLite 做同样的事情就太过分了。
用户清除数据的唯一方法是点击 Clear the Data
或点击 Uninstall
你的申请
但是,无论是更新应用程序本身还是单击 Clear the cache
都不会对 SharedPreferences 执行任何操作,用户必须按下该按钮 "Clear the Data" 如果他希望清除特定数据。
至于更有效的方法,这取决于你的意思。您正在做的是几乎每个开发人员都会做的事情。这是实际工作的最简单的解决方案。例如,如果您选择将该数据存储在活动之间的捆绑包中,那么所有高分数据都将在应用程序执行之间丢失。
也就是说,如果您要在多台设备上玩同一个游戏,或者如果您要迁移到新设备,或者如果您要卸载游戏并重新安装,您的解决方案显然是不够的稍后。为此,您可能需要考虑使用 Google Play Services 为您在本地和云端存储该数据。
我一直在考虑为我的应用程序存储数据并尝试在不同的方法之间进行选择 (onSaveInstanceState, onPause/onResume) and different methods of storing(states in onSaveInstanceState, SQLite, Prefences)。
我很好奇当用户做某些事情时,这些存储方法中的每一种会发生什么。具体来说,我想知道在以下情况下调用了哪些方法以及擦除了哪些数据:
- 用户单击任务切换器按钮(右下角),然后在几秒钟内关闭叠加层,所有操作均在应用程序内完成
- 用户在没有从任务切换器中滑出应用程序的情况下单击主页,然后重新打开应用程序
- 用户点击主页,从任务切换器中滑出应用,然后重新打开应用
- 用户退出应用程序,重新启动 phone,然后打开应用程序
- 用户退出应用程序,并使用Clean Master(或任何其他存储管理器)清除所有应用程序的缓存或终止所有后台任务,然后重新打开应用程序。
- 用户更新应用程序
- 当用户转到任务切换器并关闭应用程序时,应用程序进程将被终止,后台的所有服务运行也将停止
- 当用户点击主页,而不是从任务切换器中滑出并重新打开应用程序时,应用程序将恢复。如果您搜索 activity lifecycle ,您可以获得更多详细信息
- 当用户点击主页,从任务切换器中滑出应用时,相当于杀掉应用,进程会被杀掉,后台的所有服务运行也会停止
- 当用户退出应用程序并 restarts.reboots phone 时,进程被终止,服务也将被终止。但是在 restarting/rebooting 设备之后,一旦设备重启或应用程序被终止,用户将编写逻辑来重启它
- 当用户退出应用程序并清除缓存时,我认为数据已被清除。所以这就像一个新的应用程序。
根据我的理解,我已经给出了我的简要回答。希望这能提供一些见解。
I'm trying to store highscores. Currently i'm just using savedpreferences and putting 5-6 numbers in an editor, committing, and continuing. there might be a more efficient method, which is why I elaborated on different possibilities above.
我假设您指的是 SharedPreferences。是的,您的做法是正确的。您的高分将在应用程序执行之间保存。对 SQLite 做同样的事情就太过分了。
用户清除数据的唯一方法是点击 Clear the Data
或点击 Uninstall
你的申请
但是,无论是更新应用程序本身还是单击 Clear the cache
都不会对 SharedPreferences 执行任何操作,用户必须按下该按钮 "Clear the Data" 如果他希望清除特定数据。
至于更有效的方法,这取决于你的意思。您正在做的是几乎每个开发人员都会做的事情。这是实际工作的最简单的解决方案。例如,如果您选择将该数据存储在活动之间的捆绑包中,那么所有高分数据都将在应用程序执行之间丢失。
也就是说,如果您要在多台设备上玩同一个游戏,或者如果您要迁移到新设备,或者如果您要卸载游戏并重新安装,您的解决方案显然是不够的稍后。为此,您可能需要考虑使用 Google Play Services 为您在本地和云端存储该数据。