使用HttpURLConnection和BitmapFactory

时间:2016-07-07 10:07:32

标签: android bitmap android-asynctask httpurlconnection

我正在使用HttpURLConnection使用here所述的方法从指定的URL获取位图,为方便起见,下面复制了代码:

public static Bitmap getBitmapFromURL(String src) {
    try {
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
    } catch (IOException e) {
        // Log exception
        return null;
    }
}

我需要整个获取和解码过程在特定时间内完成,因为我是从BroadcastReceiver运行它(尽管在AsyncTask中运行它以使其远离UI线程)。因此,整个接收器操作必须在10秒内完成,以避免在中途被杀死,所以我想允许位图获取和解码,比如5秒。

我想我会被建议不要这样尝试,而是使用IntentService或者其他东西,但是我想知道是否可以通过确保快速完成AsyncTask提取来避免这种情况(即使这是通过超时)。

我知道我可以在connection上设置以下超时:

connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

但我的理解是,连接超时只是限制了连接所需的时间,而读取超时就是启动读取数据需要多长时间。< / p>

但是,这些都不会限制整个过程:连接,读取,解码。

我猜我的部分不确定性是在实际读取数据的时候结束了......是你打电话给connection.connect()还是打电话给connection.getInputStream()时或是只有你打电话给{{} 1}}?

如果仅在致电BitmapFactory.decodeStream(input)时读取数据,那么如何对其进行超时?

也许我需要设置一个总体计时器,并在触发时优雅地关闭它,而不是试图依赖与HttpURLConnection相关的超时?

0 个答案:

没有答案