Android活动具有明确定义的生命周期,它们将被暂停,停止和销毁。这是有据可查的。我的问题是关于包含我的活动as described in the docs的任务。
在内存不足或其他情况下,操作系统是否会关闭任务? (我知道用户可以强制停止应用程序。)
我可以假设我的单身人士和静态数据始终可用吗?
在Activity上定义的静态成员怎么样?似乎活动可能被破坏,但只要任务存在,静态数据就会存在。
android.app.Application有回调,如onLowMemory()和onTrimMemory(),但这些似乎是自愿的,这意味着如果应用程序与操作系统合作,它是很好的,但它不是必须的。所以,我很确定我的任务通常不会被杀死,单身人士和静力学也是可靠的。这是对的吗?
This answer也有一些很好的背景。
答案 0 :(得分:2)
我对你的问题非常好奇,所以我很快就通过一个非常简单的项目进行了简单的检查,并且我发布了我发现的内容 - 我将根据假设解答其余的问题,因为Android'清理过程非常神秘。
由此可以说,即使在销毁活动后,静态值仍然存在。即使应用程序关闭后,Android仍会保留该值。
Can I assume my Singletons and static data will always be available?
我想说,只要Android没有被推到决定需要回收内存的程度,你就可以假设这一点。
在Commonware的Android教程书中,我了解在后台运行的任何任务都被视为一项重要任务,并且不会被Android关闭。但是如果另一个任务到达前台,那么这将被赋予更高的优先级,并且后台中的所有任务都具有更低的优先级。如果Android决定前台任务需要更多内存,它将根据优先级顺序开始查杀进程,这取决于许多因素。在内存不足的情况下,任何任务都可能被杀死。在极端情况下,前景本身的任务可能会被杀死。
我希望这能回答你的问题。它肯定引起了我的兴趣。
答案 1 :(得分:0)
我可以假设我的单身人士和静态数据始终可用吗?
你永远不能假设。有时上下文更改(例如,当您转到设置并打开gps时),然后您的应用程序正在重新创建。操作系统可以随时破坏您的活动。即使在PC程序上也不应该使用静态数据
答案 2 :(得分:0)
似乎操作系统可以在低内存和其他情况下终止你的任务。而且,当然,你的静力学和单身人士会死于这项任务。
如果你需要你的静力学和单身人士来完成任务关闭和重启,你需要在某个地方坚持下去。 Android Application Framework FAQ有很好的建议。我发现您可以利用onSaveInstanceState()并将数据保存为save实例包的一部分。恢复活动时将恢复它。见Controlling Android Activity restart after a process stops