当Android应用程序的活动进入后台或被杀死时,我需要将其状态保存到磁盘。建议我在onPause()被调用时启动线程,并在其中执行任何昂贵的 I/O 操作(参见为图像编辑器快速且稳健地保存/加载文档状态)。
在哪些情况下,操作系统会杀死该线程,这些情况有多常见?
我认为它的处理方式类似于Activity,操作系统可以随意决定杀死线程,但通常只有在资源极度有限时才会这样做。不过最好能找到一些具体的文档资料。
通过测试代码进行实验,在onPause()中启动的后台线程将在我的设备上无限期地运行(我尝试了加载许多应用程序,但无法使其被杀死)。
对于我编写的具体应用程序,我正在编写一个位图编辑器,其中使用了命令模式和备忘录模式来允许撤销和重做操作。我希望用户能够在例如接电话并将活动置于后台时撤消/重做操作。我能想到的最好的解决方案是使用一个后台线程来不断将我的命令和备忘录对象保存到磁盘上,并在应用程序使用期间完成任何留存在后台线程中的对象的保存,如果onPause()被调用,则继续保存这些对象。在最坏的情况下,如果线程被杀死,我只会丢失一些编辑内容。
AsyncTask
或它们自己的线程管理机制。换句话说,这不是“服务或线程”,而是“服务 和 线程”。 - CommonsWareAsyncTask
应该没问题。但是,如果AsyncTask
需要使用活动,则会变得有些混乱,因为活动可能会消失(例如,方向更改)。有处理此问题的模式,但服务可能是您的另一个选择。最好的答案可能是IntentService
,它有效地将Service
与AsyncTask
结合起来,旨在在后台线程上运行命令。 - CommonsWare