我正在使用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相关的超时?