Android Sticky Service停止发送HTTP请求

时间:2011-07-09 05:16:26

标签: android

我正在编写一个Android应用程序,其主要活动启动服务,使自己变得粘性。该服务向服务器重复发送HTTP POST,交换一些信息。只要手机的屏幕打开,此过程就可以正常工作,但是一旦我关闭屏幕,服务会在一段时间后停止。有没有办法保证我的服务无限期地运行?

2 个答案:

答案 0 :(得分:1)

  

有没有办法保证我的服务无限期地运行?

没有

此外,您不应该希望您的服务“无限期地运行”。当然,您的用户不希望您的服务“无限期运行”,因为这就是为什么他们会使用任务杀手攻击您,在设置中的管理服务中强制停止操作,等等。更不用说市场上所有可爱的一星评级,讨论板中的选择评论以及此类应用程序将触发的类似评论。

此外,您的问题不在于您的服务本身没有运行,而是设备正在入睡。这是完全正常的。用户希望他们的设备入睡 - 否则,他们的电池寿命将会非常可怕。

  

服务重复向服务器发送HTTP POST,交换一些信息。

执行此操作的正确方法是使用AlarmManager来触发代码定期执行。您的用户应该能够控制周期(可能通过SharedPreference),包括“我将手动请求数据传输,谢谢”选项。并且,通过IntentService或类似方式,您可以安排代码启动 AlarmManager,执行其工作,然后关闭以退出RAM

AlarmManager唤醒设备退出睡眠模式并不困难(使用_WAKEUP警报风格),但保持设备唤醒时间足以让您执行HTTP请求可以是。无法在主应用程序线程上执行HTTP请求,因为它可能需要很长时间。一个方法是使用我的WakefulIntentService component IntentService,它使设备保持足够长的时间以使您的工作完成,然后关闭并让设备重新入睡。

答案 1 :(得分:0)

第一种方式:你也可以做什么来连续向服务器发送HTTP POSTS,你可以做一个计时器,并在计时器的任务内。在类TimerTask的run()中,您可以创建startService(),并在完成HTTP POST工作后立即销毁该服务。因此,定期计时器将启动服务,并且不会有任何后台服务。

第二:您还可以使用PowerManager.WakeLock

第三:您可以使用上一个答案中讨论的AlarmManager。