从WebView中获取Fragment的实例

时间:2014-04-08 15:50:14

标签: java android android-fragments android-webview

我试图引用一个活跃的片段实例,但我不确定我这样做的方式是否最好,或者是否会导致内存泄漏。在JavaScript中,这样做将保留Object的实例并可能导致问题,但我不确定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;
                    }
                }
           }
    }

    ...    

}

3 个答案:

答案 0 :(得分:2)

我不确定它是否会导致内存泄漏。如果WebView是片段的一部分那么没有 - Java GC处理周期很好,否则 - 只有当WebView停留的时间超过片段时才会泄漏。

理想情况下,您需要将需要从WebViewClient和Fragment引用的状态移动到单独的类中,并让WebViewClient和Fragment引用该类的实例。

答案 1 :(得分:1)

它不会导致内存问题,因为您只创建一个不创建新对象的指针。

答案 2 :(得分:1)

然后这样做,

if (urlType(url) == urlType(self.baseUrl)){                          

self = null;  
return false;

}

并且在获得baseUrl之后,你将释放自己的var。