我正在编写一个Android应用程序,其主Activity启动一项使其变得粘滞的服务。该服务重复发送HTTP POST到服务器,交换一些信息。只要手机的屏幕打开,此过程就可以正常工作,但一旦关闭屏幕,服务会在一段时间后停止。有什么方法可以保证我的服务无限期地运行吗?Android粘滞服务停止发送HTTP请求
回答
有什么办法可以保证我的服务一直运行下去吗?
号
此外,您应该不希望你的服务被“无限期地运行”。当然,你的用户不希望你的服务“无限期地运行”,因为这就是为什么他们会用任务杀手,在设置中的管理服务中的强制停止操作等等来攻击你。更不用说市场上所有可爱的一星级评级,讨论板上的选择评论等等,这些应用程序会触发。
此外,您的问题不在于您的服务本身没有运行,而是设备正在睡着。这很正常。用户想要他们的设备入睡 - 否则,他们的电池寿命将是可怕的。
服务向服务器重复发送HTTP POST,交换一些信息。
执行此操作的正确方法是使用AlarmManager
触发代码以定期执行。您的用户应该能够控制期间(可能通过SharedPreference
),包括“我将手动请求数据传输,谢谢”选项。并且,通过IntentService
或类似的方法,你安排你的代码是开始由AlarmManager
,做它的工作,,然后关闭,以摆脱内存。
获取AlarmManager
唤醒设备退出睡眠模式不是那么困难(使用闹钟的味道),但保持设备唤醒的时间足够长,以便您可以执行HTTP请求。 HTTP请求无法在主应用程序线程上执行,因为它可能需要很长时间。一个配方是使用我的WakefulIntentService
component,这是一个IntentService
,使设备保持足够长的时间以使您的工作完成,然后关闭并允许设备重新入睡。
第一种方法:你还可以做什么来持续向服务器发送HTTP POSTS,你可以制作一个计时器,并在计时器的任务内完成。在类TimerTask的run()中,您可以启用startService(),并且只要完成HTTP POST工作,就会销毁该服务。因此定期启动该服务,并且不会有任何后台服务。
二:您还可以使用PowerManager.WakeLock
三:您可以使用AlarmManager在以前的答案进行讨论。
- 1. Android:发送服务请求
- 2. WebRequestHandler停止发送请求
- 3. JMeter停止发送请求
- 4. 验证服务器发送HTTP请求
- 5. 发送http请求到linux服务器
- 6. 发送http请求到solr服务器
- 7. 停止服务器请求
- 8. 如何停止向每个请求的服务器发送cookie
- 9. WCF服务停止发送Web请求,一旦它在IIS
- 10. 停止向wcf服务发送用户请求
- 11. Android - 发送JSON请求到服务器
- 12. 从Android发送一个HTTP请求到一个rails服务器
- 13. Android代码发送http请求到本地服务器
- 14. 使用JSON发送HTTP请求到PHP web服务器,在ANDROID
- 15. 发送JSON到服务器通过HTTP放置请求在android
- 16. Android:如何每10秒通过服务发送http请求
- 17. 从后台服务发送http请求到服务器失败
- 18. C http服务器发送请求到我的服务器?
- 19. 发送HTTP请求
- 20. 发送HTTP请求
- 21. 向服务器发送Http请求以发送电子邮件 - Android
- 22. JMeter停止发送特定线程的HTTP请求
- 23. jmeter停止发送soap请求
- 24. Code-behind停止发送请求
- 25. 如何通过http请求发送文件到http服务器
- 26. 发送HTTP请求到服务器都异常时有发生
- 27. 停止请求服务器端
- 28. 在服务器端停止ajax请求
- 29. Android:粘滞服务不重新启动
- 30. Android Developer Console如何发送HTTP请求?
听起来你的代码有问题。你有没有看到logcat的异常?或者,你是否捕获了执行http请求的代码的异常并且没有记录错误?对我来说,这听起来像你的应用程序试图刷新活动中的某些内容,但活动已被破坏而不是暂停,然后服务失败。我这样说是因为我编码“停止”工作的任何服务的唯一原因是某件事引发了一个我没有注意到的例外。 – Augusto