首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能摆脱WakeLock吗?

我能摆脱WakeLock吗?
EN

Stack Overflow用户
提问于 2011-08-08 16:27:07
回答 1查看 1.1K关注 0票数 0

我的应用程序有几个在后台运行的服务。他们使用:长寿的TCP连接,GPS,加速计和android.os.CountDownTimer。

我已经知道当我的手机进入睡眠状态时,加速计和CountDownTimer需要部分WakeLock才能工作(Android2.2),GPS不需要WakeLock,不确定TCP?

CountDownTimer有望被java.util.Timer取代,我认为没有WakeLock它仍然可以工作?然后,我可以获取/释放WakeLock,以便定期检查加速度计。然后,当加速度计检测到移动时,我可以打开GPS。如果没有GPS信号,我可以回到我的计时器满周期。

这在没有永久WakeLock的情况下能正常工作吗?我不知道TCP连接的情况。

编辑:事实证明,当没有设置唤醒锁来获得准确的计时器时,你必须在深度睡眠中使用AlarmManager。

TCP套接字在没有wakelock的情况下工作得很好:

http://devtcg.blogspot.com/2009/01/push-services-implementing-persistent.html

一些示例代码,它试图保持套接字的活动状态:

http://code.google.com/p/android-random/source/browse/#svn/trunk/TestKeepAlive

如果不使用setSoTimeout (或设置为0表示无限),套接字似乎会持续很长一段时间,即使在电话休眠时不做任何保持活动的操作也是如此。尽管我每分钟都会在另一个服务中获取和释放一个WakeLock。我不确定这对TCP套接字有什么影响(如果有的话)。

EN

回答 1

Stack Overflow用户

发布于 2011-08-08 17:41:39

您可能想要考虑使用SoLinger标志来使您的套接字在预期关闭时保持“活动”。我相信SSH使用这种机制使您的连接在一段时间内保持“就绪”,即使您失去了物理连接。您将希望在两端都设置此标志。

还有一件事需要注意:如果延迟超时很长(比方说--一个小时),您就失去了连接,在调用close()之前,您需要将延迟超时设置为0。否则,您将不得不等待套接字刷新数据(由于超时或重新建立连接)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6979414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档