为WebView进行内存转换

时间:2015-03-30 13:20:02

标签: android webview bitmap

为什么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)如何解码位图,并保存位图来绘制?

0 个答案:

没有答案