【问题标题】:Is using WakeLock overkill while using WifiLock on Android?在 Android 上使用 WifiLock 时使用 WakeLock 是否过大?
【发布时间】:2013-11-18 09:32:04
【问题描述】:

我的音频流应用程序仅使用 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");

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

【问题讨论】:

  • 它们是不同的东西。 Partial WakeLock 保持 CPU 运行,而 WiFiLock 保持 WiFi 无线电开启。 WakeLock w/o WifiLock 也能开启 Wi-Fi,但需要一段时间(30 秒到 1 分钟)才能再次连接到网络,所以第一次连接很可能会失败。
  • 所以我“必须”添加我在 WakeLock 问题中提到的代码行?
  • @Mr_and_Mrs_D 我只在几个模型 OS 4.x 上测试过它,但这似乎是部分锁定和屏幕锁定的情况。问题是,正如我所说,Wi-Fi 直到稍后(重新连接时间)才完全连接。
  • @MisterSmith:不要依赖这个 - 这是我唤醒它的方法 - 重新连接肯定不需要 1 -1,5 分钟 - (大约 4 秒) - 但我主动调用重新连接等:stackoverflow.com/a/19968708/281545

标签: android android-wifi android-wake-lock


【解决方案1】:

同时使用它们。我确定的行为因手机而异。您可能希望搜索报告所涉及的设备 +“wifi”或“wifi 驱动程序”。您确定您的音频流应用程序仅使用 WifiLock 可以正常工作吗?这听起来很奇怪 - CPU 进入睡眠状态并且服务将停止 - 请参阅 Service, WakeLock。别的东西让手机保持清醒。所以你需要一个唤醒锁

另一方面,如果您只使用唤醒锁定,则 wifi 可能会关闭 - 我不确定您是否正在使用它 - 但安全总比抱歉好。如果它确实关闭唤醒手机不会唤醒它 - 我敢肯定。使用 wifi 锁对电池没有影响 - 使用 wifi 收音机有,无论如何你都在这样做。

所以两者 - 并确保您的服务获得它们 - 看看WakefulIntentService

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多