如何解决后台的 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。

希望对遇到同样问题的你有所帮助。如果有更好的解决方案请告诉我!