在Android上使用WifiLock时,使用WakeLock是否过度?

5
我的音频流应用程序在只有WifiLock的情况下工作正常。但是,一些设备报告说当他们关闭屏幕时,连接会中断并且音频流会停止。(他们说这种情况不会发生在3G上)因此,我想也许我可以使用Partial WakeLock。我不确定这是否能解决问题,但我认为这是一个选项。同时,在基本的WifiLock工作时添加WakeLock可能会更快地耗尽电池,而且可能无法解决问题。你觉得对于这种问题和应用程序,增加WakeLock是否合适?
private static WifiLock wifiLock = ((WifiManager) appInstance().getSystemService(Context.WIFI_SERVICE))
        .createWifiLock((android.os.Build.VERSION.SDK_INT>=12?WifiManager.WIFI_MODE_FULL_HIGH_PERF:WifiManager.WIFI_MODE_FULL), "myappwifilock");

新增加的行:
private static WakeLock wakeLock= ((PowerManager) appInstance().getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myappwakelock");

(当然,我在创建服务时获取并释放这些锁,并在其销毁时执行。)

相关链接:http://stackoverflow.com/questions/14608658/android-wifilock-not-working?rq=1 - Mister Smith
1
它们是不同的东西。Partial WakeLock 保持 CPU 运行,而 WiFiLock 保持 WiFi 无线电开启。没有 WiFiLock 的 WakeLock 也会打开 Wi-Fi,但需要一段时间(30 秒至 1 分钟)才能重新连接到网络,因此第一次连接可能会失败。 - Mister Smith
那我“必须”为WakeLock添加我在问题中注明的代码行吗? - frankish
@MisterSmith:"没有WifiLock的WakeLock也会打开Wi-Fi" -- ?! 不会吧。你确定吗? - Mr_and_Mrs_D
1
@Mr_and_Mrs_D 我只在几个4.x版本的手机上测试过,但是这个问题似乎在部分锁定和屏幕锁定时都存在。问题是,正如我所说,Wi-Fi直到稍后(重新连接时间)才完全连接。 - Mister Smith
1
@MisterSmith:不要依赖它——这是我唤醒它的方式——重新连接肯定不需要1-1.5分钟(大约4秒钟),但我会主动调用重新连接等操作:https://dev59.com/13fZa4cB1Zd3GeqPSonq#19968708 - Mr_and_Mrs_D
1个回答

3
请同时使用它们。我确定不同手机的行为可能会有所不同。您可以搜索有关报告的设备+“wifi”或“wifi驱动程序”。您确定只使用WifiLock时音频流应用程序可以正确工作吗?这听起来非常奇怪- CPU 进入睡眠状态并停止服务-请参见Service, WakeLock。其他东西使手机保持唤醒状态。因此,您需要唤醒锁定

另一方面,如果您仅使用唤醒锁,则Wifi可能会关闭-我不确定是否适用于您-但是安全第一。如果它确实关闭,唤醒手机将无法唤醒它-我确定。使用Wifi锁不会对电池产生影响-无论如何都要使用Wifi无线电。

所以两者都需要-请确保您的服务获取它们-查看WakefulIntentService


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接