我正在开发一款每 30 秒向互联网发布一次的应用程序。一切正常,直到屏幕熄灭。计时器似乎变慢了。发布需要大约 5 分钟。我已经尝试获取唤醒锁和 setforegroundactivity 但没有任何效果。这里有什么想法吗?
它作为服务运行,我用它来唤醒锁:
PowerManager mgr = (PowerManager)this.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();
这里的例子设置前景:http://developer.android.com/reference/android/app/Service.html
我也尝试使用调试器检查它能做什么,但连接 USB 后一切正常。
更多细节: 为了定期检查,我使用这个:
Private void startCheck() {
mCheckHandler.sleep(30000);
}
private CheckHandler mCheckHandler = new CheckHandler();
private class CheckHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Pservice.this.startCheck();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
我将其设置为每次检查互联网时都获取唤醒锁。现在它工作正常 :) 感谢您的所有帮助 :)
最佳答案
当屏幕关闭时,设备最终将进入低功耗状态。这种低功耗状态基本上意味着您的代码不会被执行。需要 5 分钟的原因是因为其他一些应用程序正在唤醒设备,然后您的应用程序有机会再次运行。
通过 USB 连接设备,可以防止出现低功耗状态。
听起来你的唤醒锁实际上并没有被获取或者释放得太快了。
关于屏幕关闭时的 Android "slows down",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471650/