Alv*_*nte 12 connection service android tcp alarmmanager
我需要无限期地建立TCP连接(尽可能).不是自己的服务器,所以我们不能改变它的工作方式.这个服务器每分钟都需要一些ping才能知道连接是否存在.如果服务器在几分钟(少于五分钟)后没有收到ping,则会关闭连接和会话.通过这种方式,我需要维护与服务器的TCP连接,并能够在指定的时间段发送ping.
目前我的Android服务标志为"正在进行",因此Android不应该杀死它(至少通过正常程序).Android服务似乎运行良好,ping定期发送.然而,当服务在移动电话(而不是模拟器)上运行并且它变得空闲时,android似乎在CPU休眠时冻结服务,因此TimerTask发送ping停止工作并且连接断开.
我试图通过部分唤醒锁来锁定手机进入睡眠状态,它解决了问题,但手机耗电太多,这是不可行的.
我注意到AlarmManager可以帮助完成这项任务,所以我想安排一个警报来更新正在运行的服务,然后发送ping.这将使CPU进入休眠状态并发送ping.但是每分钟安排一个警报可能也是如此耗费电量?
我目前还没有测试过这种方法,但是可行吗?是否有更好的方法来保持这种TCP连接?像Gmail这样的Android服务如何解决这类问题?
Com*_*are 11
我需要与服务器无限期地建立TCP连接.
为什么?
对于初学者来说,技术上是不可能的.用户将在网络之间切换(例如,在WiFi上,故障转移到3G),用户将离开他们有互联网覆盖的区域,用户将打开飞行模式等.
目前我有一个带有"on_course"标志的Android服务,所以Android不应该杀掉它.
Android中没有"on_course"这样的概念.Android服务可以并且将被用户(任务杀手,管理服务中的强制停止)或操作系统杀死.而且,由于这将是一项永恒的服务,如果用户不了解其持续提供的价值,您的用户将终止您的服务.
我试图通过部分唤醒锁来锁定手机进入睡眠状态,它解决了问题,但手机耗电太多,这是不可行的.
正确.
我注意到AlarmManager可以帮助完成这项任务,所以我想安排一个警报来更新正在运行的服务,然后发送ping.这将使CPU进入休眠状态并发送ping.我目前还没有测试过这种方法,但是可行吗?
当然.你仍然会消耗太多电池,恕我直言.请允许您的用户通过多种选项控制您的投票期(例如,10分钟,30分钟,1小时,从不).
像Gmail这样的Android服务如何解决这类问题?
他们使用C2DM,这是操作系统的一部分,需要大量的工程才能做到正确.在2010年Google I | O大会上有一个关于它的演示 - 视频应该在YouTube上.请注意,他们每30分钟IIRC进行一次心跳ping操作,并针对设备处于3G状态的情况进行优化(允许WiFi无线电在不活动后关闭).
如果您的永久连接目标是实现推送式通信渠道,请考虑使用C2DM.
| 归档时间: |
|
| 查看次数: |
8803 次 |
| 最近记录: |