如何解决后台的 Android Cordova App 将所有低于 1s 的 setIntervals 更改为 1s 的问题?
How to fix that an Android Cordova App in background changes all setIntervals below 1s upto 1s?
我有一个用 Cordova 编写的 Android 应用程序。在这个应用程序中,我调用了一个间隔为 100 毫秒的 setInterval 函数。当我在前台时,一切都很好,但每当我进入后台时,我注意到该函数每 1 秒而不是 100 毫秒调用一次。
测试代码是这样的:
setInterval(function() {
console.log("Tick: " + new Date().getTime());
}, 100);
我真的需要在后台每 100 毫秒调用一次此方法。此外,该设备始终连接到电源,因此如果有帮助,我可以忽略后台任何与性能相关的优化。
有谁知道我如何管理 setInterval 函数在应用程序处于后台时每 100 毫秒而不是 1 秒调用一次?
我找了两天,找到的唯一解决方案是基于 cordova-plugin-background-mode.
的解决方法
无论何时进入后台,您都可以在 Java 代码中使用此方法将 webview 的可见性设置为 Visible
appView.getEngine().getView().dispatchWindowVisibilityChanged(View.VISIBLE))
然后间隔回到100ms。
示例代码:
public class MainActivity extends CordovaActivity implements LifecycleObserver {
/* .. other code .. */
// init go to background observer
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onToBackground() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
appView.getEngine().getView().dispatchWindowVisibilityChanged(View.VISIBLE);
}
}, 1000); // wait a second to make sure we are in background state
}
/* .. other code .. */
}
其中 appView 是 CordovaActivity 中的 CordovaWebView。
希望对遇到同样问题的你有所帮助。如果有更好的解决方案请告诉我!
我有一个用 Cordova 编写的 Android 应用程序。在这个应用程序中,我调用了一个间隔为 100 毫秒的 setInterval 函数。当我在前台时,一切都很好,但每当我进入后台时,我注意到该函数每 1 秒而不是 100 毫秒调用一次。
测试代码是这样的:
setInterval(function() {
console.log("Tick: " + new Date().getTime());
}, 100);
我真的需要在后台每 100 毫秒调用一次此方法。此外,该设备始终连接到电源,因此如果有帮助,我可以忽略后台任何与性能相关的优化。
有谁知道我如何管理 setInterval 函数在应用程序处于后台时每 100 毫秒而不是 1 秒调用一次?
我找了两天,找到的唯一解决方案是基于 cordova-plugin-background-mode.
的解决方法无论何时进入后台,您都可以在 Java 代码中使用此方法将 webview 的可见性设置为 Visible
appView.getEngine().getView().dispatchWindowVisibilityChanged(View.VISIBLE))
然后间隔回到100ms。
示例代码:
public class MainActivity extends CordovaActivity implements LifecycleObserver {
/* .. other code .. */
// init go to background observer
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onToBackground() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
appView.getEngine().getView().dispatchWindowVisibilityChanged(View.VISIBLE);
}
}, 1000); // wait a second to make sure we are in background state
}
/* .. other code .. */
}
其中 appView 是 CordovaActivity 中的 CordovaWebView。
希望对遇到同样问题的你有所帮助。如果有更好的解决方案请告诉我!