2010-11-08 48 views
0

我相信这是因为一些电力节省选项或什么,但因为它只有当它的电池出现故障,我不能调试它安卓:服务表现differnat在未连接到PC

我有一个在网页上检查服务每60秒 我在服务中使用asyncTask来做到这一点 我使它Thread.thisThread.sleep(60000);之前检查

我做错了什么?睡眠函数可以导致服务器被android停止?

+0

什么是Android版本?据我所知,2.0以下版本曾经喜欢杀死你的服务,即使你指定它们永远运行。这里的解决方案是使用状态栏通知来保持进程处于打开状态。 – 2010-11-08 00:51:56

+0

其实际2.1:s – Mars 2010-11-08 01:32:56

+0

我猜你失败的意思是,一旦设备完全进入睡眠,它会停止检查。将代码更改为CommonsWare的建议将解决该问题。你可能应该多想想它真的需要多长时间才能完成,并且看看推送选项。 (http://code.google.com/android/c2dm/)每60秒一次网络连接会非常快地耗尽电量。 – cistearns 2010-11-08 06:50:27

回答

5

我有一个服务,每60秒检查一次网页我在服务中使用一个asyncTask来做到这一点,我让它Thread.thisThread.sleep(60000);检查前

请不要这样做。

首先,使期间可配置,包括“不要做这个,永远”的选项。当开发人员编写主要目的似乎耗费大量电池寿命的应用程序时,用户确实不喜欢它。让设备保持清醒状态并每分钟轮询Web服务器都将耗费大量电池寿命。正是这种行为导致用户跑到他们可以找到的每个任务杀手。

其次,特别是对于大于一分钟左右的时间段,请使用AlarmManager和[WakefulIntentService] [1]。安排AlarmManager以在用户选择的期间(理想情况下通过setInexactRepeating())调用您的应用程序。让WakefulIntentService轮询您的网页。如果你按照记录的WakefulIntentService配方,设备将保持足够长的时间让你获取你的数据,然后就会睡着了。你的服务不会一直留在记忆中。您获得了您的功能,并且用户可以获得更好的设备性能。

+0

谢谢我不知道我可以用AlarmManager做到这一点,虽然它是我自己的私人应用程序,所以我不关心电池 – Mars 2010-11-08 16:44:34