2014-04-08 5 views
0

Я пытаюсь получить ссылку на экземпляр активного фрагмента, но я не уверен, способ, которым я это делаю, лучше всего, или если это вызовет утечку памяти , В JavaScript это делается так, что он сохранит экземпляр объекта и может вызвать проблемы, но я не уверен, как 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

Возможно использование фрагмента 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 вам само вар.

Смежные вопросы