如何在没有内存泄漏的情况下从Application类访问Activity中的WebView?

时间:2017-08-01 22:24:38

标签: android android-activity memory-leaks reference static

我觉得答案应该是显而易见的,但我找不到它。如何在Application类的主活动中引用WebView?使用公共静态var在Activity类中保存对它的引用会导致内存泄漏。

当前代码(有效但导致内存泄漏)。

活动

int(float("8.5"))

应用

public class Core extends AppCompatActivity {

public static WebView coreView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_core);

    WebView myWebView = (WebView) findViewById(R.id.webview);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setPadding(0,80,0,0);

    coreView = myWebView;
}
}

编辑: 完整的App类。

public class App extends Application {
@Override
public void onCreate() {
    super.onCreate();

    Core.coreView.loadUrl("http://www.google.com");

}

}

1 个答案:

答案 0 :(得分:1)

  

如何在Application类的主要活动中引用WebView?

你不是。您将该代码移动到活动中,或者作用于该活动的某些内容(例如,片段)。

例如,您的问题中的代码肯定会崩溃,因为调用Core.coreView的时间onCreate()不会设置ApplicationonCreate()的{​​{1}}在创建任何组件(例如活动)之前被调用,作为流程开始的一部分。