我有一个网页,可以检索公交车的GPS位置,并在地图中显示这些位置。它通过如下循环每60秒检索一次位置:
function startLinhaLoop() {
if (!timer) {
loopLinha();
timer = setInterval(function() {loopLinha()}, 60000);
}
}
效果很好,你可以看到它正常工作here。
我把整个东西放在Android的应用程序中,我经常使用它。它的一个特点是,如果手机的屏幕关闭,它会说出3辆最近的公共汽车到达需要多长时间。因此,每60秒一次,您会听到"在x,y和z秒内的总线"。如果页面未处于活动状态,Web版本也会说话。
此应用程序始终完美,作为网页。但是在过去的两个月里(在我更新Android Studio之后)它开始失败(不知道为什么):循环花费的时间超过60秒,甚至是不规则的。它现在说话,然后3分钟后,然后是8,然后是2,然后是12 ......我试图看看会发生什么,脚本没有停止,也没等待下载(下载有{{1} })。它只是timeout
而不是timeout 60000
。
但是当我尝试调试应用时会发生真正奇怪的现象:只要我连接timeout random
无线并开始查看adb
,adb logcat
就能正常运行。我停止timer
服务器,计时器再次疯狂。连接,很好。断开,疯狂......这就像adb
知道我正在寻找它。一个薛定谔计时器。 :)在所有的时间里,无线连接,手机接收whatsapp或其他什么时发出噪音,因此互联网始终是完全活跃的。
我知道这个问题不是很具体而且含糊不清(对不起),但也许有人之前听过这样的话。也许这是Android Studio最近发布的一个错误?
顺便说一下,我正在Galaxy Note 4中使用扎根的Android 4.4。在我的妻子手机中,它按预期工作。
答案 0 :(得分:0)
我在代码的纯wakelock
部分使用java
解决了这个问题:
PowerManager pm;
PowerManager.WakeLock wakeLock;
public void onCreate(final Bundle onOreintChange) {
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();
....
和(不确定是否有必要,以防万一)
public void onDestroy() {
super.onDestroy();
wakeLock.release();
...
出于某种原因,我不明白,之前不需要这个,现在它已经在我的Android 4.4中(在我妻子的Android 6.0中仍然不需要)。当然adb
会阻止设备睡眠,这就是为什么它在调试过程中工作正常的原因。在其他项目中,我之前尝试wakelock
,但从未像我预期的那样工作。
虽然我没有按照他的建议完全按照@Jonas w
建议,但它让我再次尝试wakelock
。谢谢乔纳斯!