1

我的问题一般是 - 如何让后台服务在每个“INTERVAL”中运行而不收到 ANR 消息(尝试制作从 alarmManager 调用的服务,该服务启动一个线程来完成其工作)?谢谢你的帮助!

更详细:

我正在制作一个类似于 DropBox 的应用程序 - 使本地文件夹与其他 Android 手机共享。

此应用程序应在后台运行。

它还应该以一定的时间间隔运行,以检查是否在本地目录中创建了任何新数据,以便将其上传到某个服务器。

我的应用程序通常在 PsudoCode 中执行下一个序列:

1) AlarmManager.setInexactRepeating(MySerVice)
2) (when the service is being called) DecideWhichFileToUploadOrDownload()
3) UploadNewFiles() DownloadNewFiles()

我知道问题出在第 3 阶段,在上传/下载超过 10 秒后,我收到 ANR 消息(或我的应用程序被杀死),如果上传/下载时间短于 10 秒,则一切正常. 我试图创建一个可以进行上传/下载的线程,但是一旦服务完成,Android 就会杀死我的线程。

4

2 回答 2

2

如何让后台服务运行每个“INTERVAL”而不收到 ANR 消息

使用IntentService, 以便在后台线程上完成工作。

我试图创建一个可以进行上传/下载的线程,但是一旦服务完成,Android 就会杀死我的线程。

这就是您应该使用 的原因IntentService,因为 Android 管理后台线程并为您停止Service。您只需通过发送它工作startService()并在onHandleIntent().

于 2011-06-11T22:38:33.877 回答
1

不要忘记,当您的服务(由警报服务调用)执行可能需要长时间执行和/或异步的事情时,您应该考虑使用 IntentService 或您拥有线程消息传递服务

和 WakeLock(请参阅 PowerManager)

否则设备可能会返回/进入“深度睡眠”状态。然后 CPU 状态会冻结,直到下一个“事件”
在您的服务中尽快获取 WakeLock,并确保在后台工作结束时释放它...

于 2011-08-16T17:20:48.663 回答