Chamonix, France

通常在 Activity 中使用 WebView 時,會習慣在 onPause 裡頭,呼叫 WebView.onPause(),順著 Activity 的生命週期,將 WebView 順手停下來 ;然後在 onResume 來的時候,再呼叫 WebView.onResume() 讓 WebView 可以繼續運作。

這樣子的實作,在一般情況下是很 Okay 的。但一旦你的應用程式支援 multi-window 模式,上述的實作很有可能會造成你的 WebView 畫面在進入 multi-window 模式時,變成白色畫面。

觀察結果如下:

View gist

如果 WebView.onPause() 在 Activity 的 onPause (第 8 行和第 12 行) 就被呼叫的話,在 2. 裡頭的最後一步,系統會把畫面上方的 Window 又呼叫一次 onPause 。造成它雖然是在畫面上,但實際上狀態是 PAUSE 的。

目前的解法是,如果你的畫面中有用到 WebView,你要把 WebView.onResume() 的呼叫時機改到 Activity 的 onStart();然後 WebView.onPause() 延後到 Activity 的 onStop() 才做。

更多閱讀

Multi-Window Support | Android Developers

5 tips for preparing for Multi-window in Android N