java - 从 WebView 中获取 Fragment 的实例

标签 java android android-fragments android-webview

我正在尝试获取对 Activity fragment 实例的引用,但我不确定我这样做的方式是否最好,或者是否会导致内存泄漏。在 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;
                    }
                }
           }
    }

    ...    

}

最佳答案

不知道会不会造成内存泄漏。如果 WebView 是 Fragment 的一部分,则不会 - Java GC 可以很好地处理循环,否则 - 仅当 WebView 停留时间比 Fragment 长时才会泄漏。

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

关于java - 从 WebView 中获取 Fragment 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941998/

相关文章:

java - JDK 8 中的 PermGen 消除

java - 性能:使用 JCIF 将文件复制到 Windows 网络非常慢

android - 如何使用 Jetpack Compose 创建带有溢出菜单的工具栏?

java - 当按后退按钮时, ListView 会转到顶部。如何解决这个问题?

android - 在 Android Studio 中显示为水平搜索栏的垂直搜索栏

java - JTree:不会重新显示新模型

java - 使用 byte、short 和其他基本类型

java - 从非 .NET 客户端(例如 JAVA、HTML5)访问 WCF 服务需要哪些步骤?

java - Android - 将 Map<String, Object[]> 保存到文件

android - 使用 FragmentStatePagerAdapter 在 ViewPager 的两侧动态添加 fragment