我有一个应用程序,它在后台使用服务来执行一些上传/下载操作。 这些操作可能需要一些时间,具体取决于用户选择(文件的数量和大小)。
使用我的设备(nexus s)和测试模拟器时,所有工作都按计划进行,我收到用户的报告,有时在选择上传/下载大数据时操作会卡住。
使用在后台服务中运行的线程完成操作。我的猜测是操作系统有时会在内存不足的设备上杀死线程和/或服务。
在服务onStartCommand()函数中,我提出了将执行操作的线程(要处理的数据在intent中),然后我返回START_NOT_STICKY。 在我使用startService(i)的活动中,没有进行任何绑定。
如何防止这种情况?如何确保系统不会杀死我的服务或线程?
答案 0 :(得分:1)
使用startForeground()可能有助于您实现目标。
来自docs:
启动的服务可以使用startForeground(int,Notification)API 将服务置于系统考虑的前台状态 它是用户积极意识到的东西,因此不是 当内存不足时被杀的候选人。 (理论上还是如此 可能会在极端记忆压力下杀死该服务 从当前的前台应用程序,但在实践中这应该 不要担心。)