1

我有一个应用程序在后台使用服务来执行一些上传/下载操作。这些操作可能需要一些时间,具体取决于用户选择(文件的数量和大小)。

虽然使用我的设备(nexus s)和测试模拟器,一切都按计划进行,但我收到用户的报告,称在选择上传/下载大数据时操作有时会卡住。

该操作是使用在后台服务中运行的线程完成的。我的猜测是操作系统有时会杀死内存不足的设备上的线程和/或服务。

在服务 onStartCommand() 函数中,我提升了将执行操作的线程(要处理的数据在意图内),然后我返回 START_NOT_STICKY。在我使用 startService(i) 的活动中,没有完成绑定。

如何防止这种情况?如何确保系统不会杀死我的服务或线程?

4

1 回答 1

1

使用startForeground()可以帮助您实现目标。

来自文档:

启动的服务可以使用 startForeground(int, Notification) API 将服务置于前台状态,系统认为它是用户主动意识到的,因此在内存不足时不适合杀死。(理论上,在当前前台应用程序的极端内存压力下,服务仍然可能被杀死,但实际上这不应该是一个问题。)

于 2012-07-22T13:02:45.757 回答