首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从WebView中获取片段实例

从WebView中获取片段实例
EN

Stack Overflow用户
提问于 2014-04-08 15:50:13
回答 3查看 166关注 0票数 0

我试图获得一个对活动片段实例的引用,但我不确定我这样做的方式是否最好,或者它是否会导致内存泄漏。在JavaScript中,这样做将保留对象的一个实例,并可能导致问题,但我不确定Java将如何在GC中运行。

下列方法有效,但有更好的方法吗?

代码语言:javascript
运行
复制
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;
                    }
                }
           }
    }

    ...    

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-08 15:56:58

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

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

票数 2
EN

Stack Overflow用户

发布于 2014-04-08 15:56:42

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

票数 1
EN

Stack Overflow用户

发布于 2014-04-08 15:58:21

那就这么做,

代码语言:javascript
运行
复制
if (urlType(url) == urlType(self.baseUrl)){                          

self = null;  
return false;

}

在得到baseUrl后,您将取消自己的变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22941998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档