java - 唤醒锁和 wifiLock

标签 java android

当我启动服务时,每隔几秒我就会获取一些数据发送到服务器

唤醒锁

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
    wakeLock.acquire();

和wifiLock

WifiManager wMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    wifiLock = wMgr.createWifiLock(WifiManager.WIFI_MODE_FULL, "MyWifiLock");
    wifiLock.acquire();

但是,如果设备一小时内未触摸且处于 sleep 模式,wifi 将停止工作。这是正常行为吗?如果不是,我应该如何锁定设备直到 release()方法被调用?

最佳答案

当设备一段时间不使用时,Android 会 hibernate 设备以优化电池性能,所以是的,这是正常行为。

首先,强烈建议您不要尝试阻止设备进入瞌睡模式,以提高设备的电池性能。您可以在 official documentation 中阅读有关打瞌睡的更多信息。 .

如果您出于某种原因有严格的要求,需要保持服务处于 Activity 状态,您可以尝试添加 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS您的应用程序中的权限。但请注意,根据官方文档 here 中的以下引用,您的应用程序可能会被 Google Play 商店拒绝(如果它应该在那里发布)。 :

Note: Google Play policies prohibit apps from requesting a direct exemption from Power Management features in Android 6.0+ (Doze and App Standby) unless the core function of the app is adversely affected.

关于java - 唤醒锁和 wifiLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214354/

相关文章:

java - 将 Jfreechart 保存到我的数据库

java - PDFBox:处理非常大的 PDF。

java - 在 Android 中从文本字段转换为数字

java - 将 eclipse paho mqtt 依赖项添加到 Andrdoid Studio 项目时出现重复类错误

java - 在byte buddy的MethodDelegation中高效获取调用者

Java 8 : mapping list inisde a list

android - 运行时权限应用级别或 Activity 级别

java - 使用 Socket 与服务器通信

android - 以编程方式更改动画的开始位置

java - 如何混合两个 PCM 音频文件