Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “奇怪”;“量子”;android中的定时器/超时现象_Javascript_Android_Settimeout - Fatal编程技术网

Javascript “奇怪”;“量子”;android中的定时器/超时现象

Javascript “奇怪”;“量子”;android中的定时器/超时现象,javascript,android,settimeout,Javascript,Android,Settimeout,我有一个网页,检索公交车的GPS位置,并在地图上显示这些位置。它通过如下循环每60秒检索一次位置: function startLinhaLoop() { if (!timer) { loopLinha(); timer = setInterval(function() {loopLinha()}, 60000); } } 它工作得很好,你可以看到它在工作 我把所有的东西都放在一个android应用程序中,我经常使用它。它的一个特点是,如果手机屏幕关闭,它会显示最近的3

我有一个网页,检索公交车的GPS位置,并在地图上显示这些位置。它通过如下循环每60秒检索一次位置:

function startLinhaLoop() {
  if (!timer) {
    loopLinha();
    timer = setInterval(function() {loopLinha()}, 60000);
  }
}
它工作得很好,你可以看到它在工作

我把所有的东西都放在一个android应用程序中,我经常使用它。它的一个特点是,如果手机屏幕关闭,它会显示最近的3辆公交车到达的时间。因此,每60秒,你会听到“x、y和z秒内的总线”。如果页面未处于活动状态,web版本也会说话

这个应用程序一直工作得很好,就像网页一样。但是在过去的两个月里(在我更新了Android Studio之后),它开始失败(不知道为什么):循环需要超过60秒,甚至是不规则的。它现在说话,然后3分钟后,然后8,然后2,然后12。。。我已经尝试查看发生了什么,脚本没有停止,也没有等待下载(下载有一个
超时
)。这就像是
timeout 60000
而不是
timeout random

但是,当我试着调试应用程序时,真正奇怪的现象发生了:只要我连接无线
adb
并开始查看
adb logcat
计时器就可以正常工作。我停止了adb
服务器,计时器又开始疯狂了。连接,好的。断开连接,疯了。。。这就像
定时器知道我在看它一样。薛定谔计时器。:)一直以来,wifi都是连接的,手机在接收whatsapp或其他内容时会发出噪音,因此互联网始终处于完全活跃状态

我知道这个问题不是很具体,也有点模糊(很抱歉),但也许有人以前听说过类似的事情。也许这是最近发布的Android Studio中的一个bug


顺便说一句,我在Galaxy Note 4的根安卓4.4中工作。在我妻子的手机中,它可以正常工作。

我通过在纯
java
代码部分使用
wakelock
解决了这个问题:

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();
    ....
和(不确定这是否必要,以防万一)

出于某些我不理解的原因,这在以前是不需要的,现在它出现在我的安卓4.4中(在我妻子的安卓6.0中仍然不需要)。当然,
adb
可以防止设备睡眠,这就是为什么它在调试期间工作正常。在其他项目中,我曾经尝试过wakelock,但从未像我预期的那样工作过


虽然我并没有完全按照乔纳斯的建议去做,但这让我又尝试了一次。谢谢你,乔纳斯

我认为对于一个完美的解决方案,您应该将其转换为本机java…在窗口失去焦点时清除计时器。。看,是的,但android进入睡眠状态(有时会醒来),你需要控制这种唤醒以获得所需的行为…是的,whatsapp唤醒,doeant意味着你的js正在运行…也许这个答案会有所帮助。。。
public void onDestroy() {
    super.onDestroy();
    wakeLock.release();
    ...