工作记录,请辩证来看!!!android setTimeout() 方法在 Android 9.0 失效。
问题:
应用在后台或者锁屏,代码中setTimeout(function(){ alert("hello");},60000),不断多次调用,最多能调用5~7次,就会停止。(ionic3 项目 pad android 9.0 设备);
问题分析:
说明:目前只是有一个解决方案,期待更好的方法;
js是单线程,主线程执行同步方法,异步方法将会进去“任务栈”,在“任务栈”执行完毕,将结果放进“消息队列”,当主线程执行完毕,轮询机制将取出“消息队列”中的消息,给到主线程,根据我的错误日志,停掉的位置均在将要执行异步方法之前,猜测问题出现了异步方法这里,所以setTimeOut()这个异步方法定是不能用了,还要避免在计时器内部使用异步函数。
解决方案:
开启后台模式:background-mode,android内部实现如下:
写一个Cordova android 插件,实现计时功能,核心代码如下(后续会专门写一篇记录该插件的详细写法):