我正在尝试获取对 Activity fragment 实例的引用,但我不确定我这样做的方式是否最好,或者是否会导致内存泄漏。在 JavaScript 中,这样做会保留对象的实例并可能会导致问题,但我不确定 Java 将如何处理 GC。
以下方法可行,但是有更好的方法吗?
public class WebframeFragment extends Fragment {
...
String baseUrl;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Fragment self = this; // will this cause trouble?
this.baseUrl = getActivity().getIntent().getStringExtra(Extra.REQUEST_URL);
webActivity.setWebView(webView);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (urlType(url) == urlType(self.baseUrl)){
return false;
}
}
}
}
...
}
最佳答案
不知道会不会造成内存泄漏。如果 WebView 是 Fragment 的一部分,则不会 - Java GC 可以很好地处理循环,否则 - 仅当 WebView 停留时间比 Fragment 长时才会泄漏。
理想情况下,您可以将需要从 WebViewClient 和 Fragment 引用的状态移至单独的类中,并让 WebViewClient 和 Fragment 引用该类的实例。
关于java - 从 WebView 中获取 Fragment 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941998/