2011-06-11 57 views
1

我的问题一般是 - 如何在每个“INTERVAL”上运行后台服务,而不是获取ANR消息(尝试使从alarmManager调用的服务启动线程来执行它工作)? 感谢您的帮助!由于长时间的操作问题导致的Android ANR消息

更具体:

我提出一个应用程序这是一种的DropBox的 - 做一个本地文件夹与其他Android手机共享。

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

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

我一般应用程序执行下一序列中PsudoCode:

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

我知道这个问题是阶段3,上传/下载软件,需要超过10秒,我得到了ANR消息后(或我的应用程序正在被杀死),如果上传/下载短于10秒,那么所有的工作都很好。 我试图做一个线程,将上传/下载,但一旦服务完成Android杀死我的线程。

+0

谢谢!我不知道这个东西。 – talel 2011-06-11 22:40:44

+0

没问题,它有助于确保您的问题继续获得答案。 – Maximus 2011-06-12 00:54:16

回答

2

如何做一个后台服务运行的每一个“间隔”,并没有得到ANR消息

使用IntentService,使工作是在后台线程中完成的。

我试图做一个线程,将做上传/下载,但一旦服务完成Android杀死我的线程。

这就是为什么你应该使用一个IntentService,由于Android同时管理后台线程和停止Service你。您只需通过startService()发送工作,并在onHandleIntent()中完成工作。

+0

嗨,谢谢。 我应该从哪里调用startService()?警报管理器将调用startService,然后调用onHandleIntent? – talel 2011-06-13 15:48:03

1

不要忘了,当你的服务(由报警服务调用)做的事,可能需要长期运行的执行和/或异步你已考虑使用IntentService或您自己的线程消息服务

和 激活锁定(见电源管理器)

否则设备可以返回/进入“深睡眠”状态。然后CPU状态fronzen,直到你的服务下一个“事件”
采集唤醒锁定尽快并确保在年底发布它的后台工作...

相关问题