Android ANR消息由于持久的操作问题

时间:2011-06-11 21:03:34

标签: android android-service android-alarms

我的问题一般是 - 如何使每个“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就会杀死我的线程。

2 个答案:

答案 0 :(得分:2)

  

如何使每个“INTERVAL”运行后台服务而不获取ANR消息

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

  

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

这就是为什么你应该使用IntentService,因为Android管理后台线程并为你停止Service。您只需通过startService()发送内容,然后在onHandleIntent()中完成工作。

答案 1 :(得分:1)

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

和   WakeLock(参见PowerManager)

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