2014-04-08 82 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你自我變種。