WebViewの暴走を止める

Androidネイティブアプリが WebView を含んでリッチな表現を提供するのは今や常套手段となっています。

TkMixiViewerの場合、mixiのコンテンツだけでなくそこからリンクしたページまでも WebView で表示するようになり、よりブラウザとしての一般的な実装が求められてきました。

そんな中、ユーザから「ホームボタンでバックグラウンドにしても電池を消費している」という指摘が。広告を含む無料版ではなく有料版でも発生していること、TkMixiViewerは基本的にUIスレッドのみで別スレッドは通信時にしか立ち上げていないことから、WebView の暴走を疑いました。

"WebView onPause" あたりのキーワードでググるとすぐに下記のページが見つかりました。

android - WebView threads never stop (WebViewCoreThread, CookieSyncManager, http[0-3]) - Stack Overflow

解決策通り、リフレクションでonPause/onResumeを制御してやることで暴走を止められました。

WebView を組み込んだアプリは多いけど、一般サイトを表示するアプリってそう多くはないからまだノウハウとして知れ渡ってはいないのかも。
今一度、自分のアプリの WebView 実装を見返してみるといいかも。

# いやほんと、WebView 周りはバッドノウハウの固まりだよ。。。