我一直在使用一个工具漏金丝雀来识别我的应用程序中的内存泄漏。好像每次我的WebViewActivity都会泄露。
我创建了一个简单的应用程序来测试泄漏。我使用xml布局文件中的WebView启动一个活动/使用活动上下文进行充气。Js关了。默认情况下,都期望有一个简单的webViewClient,在WebView中保持重定向。每次都会泄露。
我已经做了大量的研究,防止这种情况的唯一方法是用另一个进程启动WebViewActivity,并在onDestroy中杀死它。但这种方法也有其自身的缺点。
在我所有运行5.0+的设备上,每次都会发生泄漏,但是还没有检查一下4.3或更低的版本。
泄漏信息粘贴在下面:
在com.example.webviewMemyletest:1.0:1.* com.example.webviewmemoryleaktest.WebViewActivity泄露了:* GC根android.os.ResultReceiver$MyResultReceiver.this$0 * references org.chromium.content.browser.ContentViewCore$2$1.this$1 (匿名类扩展android.os.ResultReceiver) * references org.chromium.content.browser.ContentViewCore$2.this$0 * references org.chromium.content.browser.ContentViewCore.mContext * references com.android.webview.chromium.ResourcesContextWrapperFactory$WebViewContextWrapper.mBase *泄漏com.example.webviewmemoryleaktest.WebViewActivity实例
如果有人能帮忙的话。谢谢!
发布于 2015-11-30 03:45:34
private ResultReceiver mResultReceiver = new ResultReceiver(new Handler()) {
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
getContentViewClient().onImeStateChangeRequested(
resultCode == InputMethodManager.RESULT_SHOWN
|| resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN);
if (resultCode == InputMethodManager.RESULT_SHOWN) {
// If OSK is newly shown, delay the form focus until
// the onSizeChanged (in order to adjust relative to the
// new size).
// TODO(jdduke): We should not assume that onSizeChanged will
// always be called, crbug.com/294908.
getContainerView().getWindowVisibleDisplayFrame(
mFocusPreOSKViewportRect);
} else if (hasFocus() && resultCode
== InputMethodManager.RESULT_UNCHANGED_SHOWN) {
// If the OSK was already there, focus the form immediately.
assert mWebContents != null;
mWebContents.scrollFocusedEditableNodeIntoView();
}
}
};
@Override
public ResultReceiver getNewShowKeyboardReceiver() {
return mResultReceiver;
}让mResultReceiver成为私有的。
https://stackoverflow.com/questions/30247857
复制相似问题