WebViewを利用していて開閉を繰り返すと、AndroidProfilerでメモリを確認したら、Graphicsの部分が数Mずつ増えていたので対処してみた。
・Android 7.1
・WebViewはレイアウトに定義してFragmentに入れています。
レイアウトは適当に、画面いっぱいにでも。
public class WebFragment extends Fragment { private WebView webView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_web, container, false); webView = (WebView)view.findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient()); // use client webView.clearCache(true); // none cache webView.loadUrl("https://www.google.co.jp/"); webView.getSettings().setJavaScriptEnabled(true); // use javascript //WebView.setWebContentsDebuggingEnabled(true); // use debug return view; } }
setWebViewClient をすることでアプリ内にブラウザを開く
getSettings().setJavaScriptEnabled(true) をしないとJavascript動きません
setWebContentsDebuggingEnabled(true) でPCのChromeからデバッグできます
・WebViewの処理を明示的にしてみる
@Override public void onDestroy() { super.onDestroy(); webView.stopLoading(); webView.setWebChromeClient(null); webView.setWebViewClient(null); webView.destroy(); webView = null; }
これでGraphicsのメモリの増加がましになった気がする。
・他にもFragmentをaddでWebViewのFragmentを表示しているので、閉じるときにremoveするのも必要かも。。
popBackStackで一つ前の画面に戻ります
getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); getActivity().getSupportFragmentManager().popBackStack();
※ 上記コードの書き方では、Fragment切替にアニメーションを入れてたらアニメしませんので、removeはonDestroyのとこにいれたほうがいいかも。