CQM*_*CQM 10 multithreading android image out-of-memory webview
我在webview中显示一个相当大的图像,以便可以使用缩放缩放功能和其他查看便利.
它第一次正确显示.但是在离开活动并回到它之后,应用程序崩溃了与webview线程相关的OutofMemoryError.
我尝试了几个尝试关闭webview或停止线程,或清除其内存使用,但无济于事.以下是我添加到活动onStop()
功能中的代码示例
wv.stopLoading();
wv.clearCache(true);
//removeView(wv);
wv.clearView();
wv.freeMemory();
wv.destroy();
try {
Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(wv, (Object[]) null);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
无论如何,请随意批评任何这些代码行,但重点是它们对错误没有任何影响!它与webviewcore线程本身有关,不释放内存.
这对我来说很惊人,因为即使我使用的是较小的图像,这看起来仍然会最终发生.救命?
好的,这个问题的结论是,在这些文件大小下无法预先确定或正确清除字符串缓冲区。
在本例中,图像作为字符串从服务器中拉出,作为字符串进行操作,最后显示为图像。
无论显示为 ImageView 还是 Webview,都没关系,一旦字符串缓冲区已满,应用程序就会崩溃(无论我释放多少内容或设置为空,都不会清除),这是一种加密工作。
但最终决定将图像存储在应用程序的资产文件夹中。