套接字连接需要Android应用锁吗?

2019年7月28日 9点热度 0条评论

我的应用程序通过我编写的服务与服务器保持套接字连接,但是一旦手机进入休眠状态(屏幕关闭后几分钟),我就无法从休眠的手机中获得典型的响应。服务收到网络事件后,通常会播放声音。

我的问题是,我是否需要唤醒锁才能具有我的应用功能。如果是这样,wake_lock对哪些组件有用?我对声音和插座连接感到好奇。我能否仅使用部分唤醒锁来做到这一点?

至于套接字连接,如果在wifi下完成连接,是否需要额外的wifi锁?套接字连接每隔一段时间仅包含少量事务,因此有没有办法使套接字连接不在wifi下(即使用户启用了wifi),所以我不必锁定wifi并浪费电源?还是仅在3g / 4g以下方便地进行套接字连接,还是可以从wifi优雅地退化为3g / 4g?

谢谢!

解决方案如下:

我是否需要一个ake_lock才能拥有我的应用功能

通常,是的。如果您的网络连接是通过移动数据进行的,并且服务器的插座已打开,并且该服务器向您发送了数据包,则这将短暂唤醒电话。但是,要进行任何认真的工作,您需要获取WakeLock。并且如果上面的斜体if语句中的任何一个都不正确,那么只要您想保持此连接就需要WakeLock

因此,请考虑切换到C2DM以获得推送通知。

我能否仅使用部分唤醒锁来做到这一点?

部分WakeLock就足够了。

如果在wifi下进行操作,是否需要额外的wifi锁?

是。

有没有一种方法可以使套接字连接不在wifi(即使用户启用了wifi)下,所以我也不必锁定wifi和浪费电源?

并不是的。您请求套接字连接。您可以使用当时处于活动状态的任何网络。

还是仅在3g / 4g以下方便地进行套接字连接,还是可以从wifi优雅地退化为3g / 4g?

如果WiFi断电或无法使用网络连接,则网络连接可以正常返回到移动数据。但是,套接字连接没有。如果您在WiFi上具有套接字连接,并且WiFi掉电,则您的套接字已关闭,您需要在新网络上重新打开它。