ひらい ぶらり Hi-Library

ぷろぐらみんぐについて。ときどきどうでもいいことについて。

resumeTimers pauseTimers を使う時の注意

WebViewを使うと電池の消耗が激しい時の解決方法
を書いた後に気づいたので書きます。
電池の勝手な消費が解決したわけですが、よくわからないままに終わらせるのはよくないなーと思ったのでリファレンスを覗いてみたらこんなことが書かれてました。
pauseTimers()

Pauses all layout, parsing, and JavaScript timers for all WebViews.

えーなになに
全てのウェブビューのレイアウトとかJavascriptを停止するよ!」
へーふーん。

えっ


なんとこのメソッド。WebViewのインスタンすではなく、全てのWebViewを停止するようです。じゃぁ全てのWebViewって何を指すんでしょうね?タブとかで幾つかあるのならそれらは全部止まりそうです。そこまでは予想付きました。
まさかActivity遷移後まで影響するとは思いませんでした。
おにーさんびっくり。
ここで気をつけていただきたいのは、例えばもしアプリの中に広告を表示していたとしましょう。そして、その広告SDKたまたま偶然内部的にWebViewで広告を表示していたとすると、遷移前のアクティビティでpauseTimers()が呼び出されていると、広告のWebViewのJavaScriptとかが動かずに広告が出ません。出ません。びっくり。
しかもSDKなので下手に中を弄ったり出来ない。びっくり。
仕方がないので、そのSDKを呼び出しているアクティビティのonPauseとonResumeの中で↓みたいなことをすることで一時的な解決は得られるかもしれません。

 

    @Override
    protected void onResume() {
        super.onResume();
        WebView webView = new WebView(this);
        webView.resumeTimers();
    }

    @Override
    protected void onPause() {
        super.onPause();
        WebView webView = new WebView(this);
        webView.pauseTimers();
    }

べ、べつに実体験なんかじゃないんだからね!