Android项目中WebView的内存泄漏
我正在将一个java项目应用到Android项目中。java项目使用来自Android项目的Activity对象的引用当我调用java项目上的函数时,我发送Activity引用。到目前为止还可以,但有时会出现错误。这是内存泄漏:Android项目中WebView的内存泄漏,android,memory-leaks,Android,Memory Leaks,我正在将一个java项目应用到Android项目中。java项目使用来自Android项目的Activity对象的引用当我调用java项目上的函数时,我发送Activity引用。到目前为止还可以,但有时会出现错误。这是内存泄漏: 09-09 20:54:38.496: E/WindowManager(15895): android.view.WindowLeaked: Activity com.test.android.MainActivity has leaked window com
09-09 20:54:38.496: E/WindowManager(15895): android.view.WindowLeaked: Activity com.test.android.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{425c0468 V.E..... R.....I. 0,0-720,1280} that was originally added here
09-09 20:54:38.496: E/WindowManager(15895): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:467)
09-09 20:54:38.496: E/WindowManager(15895): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267)
09-09 20:54:38.496: E/WindowManager(15895): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
09-09 20:54:38.496: E/WindowManager(15895): at android.app.Dialog.show(Dialog.java:289)
09-09 20:54:38.496: E/WindowManager(15895): at com.test.AppBase$5.run(AppBase.java:210)
09-09 20:54:38.496: E/WindowManager(15895): at android.app.Activity.runOnUiThread(Activity.java:4924)
09-09 20:54:38.496: E/WindowManager(15895): at com.test.AppBase.setVisibility(AppBase.java:197)
09-09 20:54:38.496: E/WindowManager(15895): at com.test.AppBase.callSmth(AppBase.java:140)
09-09 20:54:38.496: E/WindowManager(15895): at com.test.AppBase.callSmth(AppBase.java:156)
09-09 20:54:38.496: E/WindowManager(15895): at com.test.android.MainActivity.onClick(MainActivity.java:47)
09-09 20:54:38.496: E/WindowManager(15895): at android.view.View.performClick(View.java:4654)
09-09 20:54:38.496: E/WindowManager(15895): at android.view.View$PerformClick.run(View.java:19438)
09-09 20:54:38.496: E/WindowManager(15895): at android.os.Handler.handleCallback(Handler.java:733)
09-09 20:54:38.496: E/WindowManager(15895): at android.os.Handler.dispatchMessage(Handler.java:95)
09-09 20:54:38.496: E/WindowManager(15895): at android.os.Looper.loop(Looper.java:146)
09-09 20:54:38.496: E/WindowManager(15895): at android.app.ActivityThread.main(ActivityThread.java:5602)
09-09 20:54:38.496: E/WindowManager(15895): at java.lang.reflect.Method.invokeNative(Native Method)
09-09 20:54:38.496: E/WindowManager(15895): at java.lang.reflect.Method.invoke(Method.java:515)
09-09 20:54:38.496: E/WindowManager(15895): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
09-09 20:54:38.496: E/WindowManager(15895): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
09-09 20:54:38.496: E/WindowManager(15895): at dalvik.system.NativeStart.main(Native Method)
我也搜索过了,发现这不是开发者的错,但我不知道这两者是否有联系。堆栈跟踪中没有太多细节,但在上面的一个跟踪中,我的代码肯定是这样的
我不知道;i don’我不知道现在要尝试什么,我应该不从主线程显示webview吗
mActivity.runOnUiThread(new Runnable() {
public void run() {
mWebView = MyWebViewFactory.create(mActivity, "");
dialog = MyWebViewFactory.showWebView(mActivity, mWebView);
}
});
及
谢谢
mActivity.runOnUiThread(new Runnable() {
public void run() {
mWebView = MyWebViewFactory.create(mActivity, "");
dialog = MyWebViewFactory.showWebView(mActivity, mWebView);
}
});
public static Dialog showWebView(final Activity context, final WebView webView) {
Dialog callAlert = new Dialog(context,
android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
callAlert.requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = callAlert.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
callAlert.setCanceledOnTouchOutside(true);
callAlert.setContentView(webView);
callAlert.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
callAlert.getWindow().setLayout(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
callAlert.getWindow().setFormat(PixelFormat.TRANSLUCENT);
callAlert.setCancelable(true);
return callAlert;
}