我正在尝试查找有关Android
Application
类生命周期的官方文档。显然,对于我在StackOverflow here和here上发现的内容,如果系统需要内存,Application类可以被杀死。即使是this教程也是如此。
但有些事情让我有点恼火:
Application
类可以在内存不足的情况下被杀死。Application
生命周期的官方图表。onLowMemory()
Application
类被杀之后,我找不到任何正确的回调。这是否意味着我必须使用此方法来保存我的数据?Application
类在低内存压力下被杀死并且应用程序再次出现在前台,我怎么能在其onCreate()
中知道在系统终止后应用程序已被重新创建?在Activity
我会测试savedInstanceState
,但据我所知,Application
类中没有任何类似内容。感谢您的启发。
答案 0 :(得分:4)
我找不到官方文档告诉我是的,Application类可以在内存不足时被杀死。
以下是对其中所述内容的引用:
我找不到任何代表应用程序生命周期的官方图表。
这是一个合理的观察......虽然以下是基于意见的,但我最好的猜测是这样的图表会与Android的多任务“哲学”相矛盾,如上一篇参考文献所述:
“Android如何以这种方式处理应用程序的关键是流程不会干净地关闭。当用户离开应用程序时,其进程将在后台保留,允许它继续工作(对于如果需要,下载网页的示例),如果用户返回,则立即到达前台。如果设备永远不会耗尽内存,那么Android将保留所有这些进程,真正让所有应用程序“运行”所有时间“。
除了
onLowMemory()
除外,我找不到任何适当的回调函数。这是否意味着我必须使用此方法来保留我的数据?
关于描述非常简单的onLowMemory()
,我们是在谈论后台进程还是前台用户界面?...
如果应用程序Activities
都没有位于前台且操作系统内存不足,则可能会导致应用程序无法使Application
或应用程序组件(Activity
,将调用Service
)回调。也就是说,(因为你正在处理Activities
)我建议按照onPause()中的文档存储所有持久数据。
如果Application类在低内存压力下被杀死并且应用程序再次出现在前台,我怎么能在其
onCreate()
中知道在系统被杀后应用程序已被重新创建?
您无法在Application
的onCreate()
中识别它。
答案 1 :(得分:1)
据我所知,你无法处理应用程序被杀死的事件。以下是应用程序onTerminate方法的引用:
此方法适用于模拟过程环境。永远不会 在生产Android设备上调用,删除进程 简单地杀死他们;没有用户代码(包括此回调) 执行时执行。
一般的想法是你不应该关心应用程序是否被杀死。如果是,操作系统将在下次需要时重新启动应用程序,否则将恢复(并且您将使用活动/片段生命周期事件来实现此目的)。
您需要存储哪些数据 - 是否可以提前存储(从Web服务接收等等)而不是等待最后一刻?