为什么WebView会使用如此小的内存来显示位图?
这是一个位图,大小为3000 * 2077。
http://img.bz1111.com/d7/2012-8/2012081210376.jpg
当我在ImageView中显示它时,它会投射超过20MB的内存来显示它(我认为位图使用ARGB_8888进行解码)。
public class ImageViewActivity extends Activity {
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImageView imageView = new ImageView(this);
mImageView = imageView;
setContentView(imageView);
new LoadImageTask().execute("http://img.bz1111.com/d7/2012-8/2012081210376.jpg");
}
private class LoadImageTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
return BitmapFactory.decodeStream(new URL(params[0]).openStream());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
mImageView.setImageBitmap(bitmap);
}
}
虽然在WebView中它只投了40KB:
public class WebViewActivity extends Activity {
private static final String HTML_WITH_IMAGE = "<html>" +
"<head></head>" +
"<body>" +
"<img src=\"%s\" />" +
"</body>" +
"</html>";
private static final String HTML_WITHOUT_IMAGE = "<html>" +
"<head></head>" +
"<body>" +
"<span>Empty</span>" +
"</body>" +
"</html>";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create WebView;
WebView webView = new WebView(this);
setContentView(webView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
String imageUrl = getIntent().getStringExtra("image_url");//http://img.bz1111.com/d7/2012-8/2012081210376.jpg
String html = null;
if (TextUtils.isEmpty(imageUrl)) {
html = HTML_WITHOUT_IMAGE;
} else {
html = String.format(Locale.ENGLISH, HTML_WITH_IMAGE, imageUrl);
}
webView.loadDataWithBaseURL("http://www.google.com",
html,
"text/html",
"utf-8",
"");
}
我想知道,WebView(或WebKit)如何解码位图,并保存位图来绘制?