我试图获得一个对活动片段实例的引用,但我不确定我这样做的方式是否最好,或者它是否会导致内存泄漏。在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;
}
}
}
}
...
}发布于 2014-04-08 15:56:58
我不确定它是否会导致内存泄漏。如果WebView是片段的一部分,那么不是-- Java处理周期很好,否则--只有当WebView停留的时间比片段长时,它才会泄漏。
理想情况下,您需要将需要从WebViewClient和片段引用的状态移动到一个单独的类中,并让WebViewClient和片段引用该类的一个实例。
发布于 2014-04-08 15:56:42
它不会导致内存问题,因为您只是在创建指针,而不是创建新对象。
发布于 2014-04-08 15:58:21
那就这么做,
if (urlType(url) == urlType(self.baseUrl)){
self = null;
return false;
}在得到baseUrl后,您将取消自己的变量。
https://stackoverflow.com/questions/22941998
复制相似问题