2014-04-08 46 views
0

我试图获得对活动片段的实例的引用,但我不确定如果我这样做的方式最好,或者它会导致内存泄漏。在JavaScript中,像这样做会保留Object的一个实例并可能导致问题,但我不确定Java会如何处理GC。从WebView中获取片段的实例

以下的工作,但有没有更好的方法?

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; 
        } 
       } 
      } 
    } 

    ...  

} 
+0

可能会使用Fragment self = this.getContext();你会得到更好的结果 – HCarrasko

+0

虽然我需要访问'this.baseUrl'。 –

回答

2

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

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

1

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

1

然后做到这一点,

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

self = null; 
return false; 

} 

后得到的baseUrl你的dealloc你自我变种。