(Android) Download Images by AsyncTask API
来源:互联网 发布:ip端口绑定域名 编辑:程序博客网 时间:2024/04/30 20:20
1. Check network status
AndroidManifest.xml
<uses-sdk> ... </>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
MainActivity.java
public boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
2. Extends AsyncTask to download images.
Normally, we create mutl-thread which is used to download images.
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.
AsyncTask is designed to be a helper class around Thread
andHandler
and does not constitute a generic threading framework. AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by thejava.util.concurrent
pacakge such as Executor
, ThreadPoolExecutor
andFutureTask
.
An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread. An asynchronous task is defined by 3 generic types, calledParams
,Progress
and Result
, and 4 steps, called onPreExecute
,doInBackground
, onProgressUpdate
andonPostExecute
.
public class ImageDownload extends AsyncTask<String, Integer, Boolean> {
private ImageView view;
private Bitmap img;
public ImageDownload(ImageView view) {
this.view = view;
}
@Override
protected Boolean doInBackground(String... urls) {
try {
URL imageUrl = new URL(urls[0]);
URLConnection conn = imageUrl.openConnection();
img = BitmapFactory.decodeStream(conn.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean downloadResult) {
if (downloadResult) {
view.setImageBitmap(img);
}
}
protected void onProgressUpdate(Integer... progress) {
//Set progress
}
}
3. Begin to download images
String[] urls = new String[1];
urls[0] = "http://media.zenfs.com/ko_KR/News/starnn/20130121130545_50fcbe998c3d0_1.jpg";
ImageDownload imageDownload = new ImageDownload(imageDownloadView);
imageDownload.execute(urls);
新增了二个预定义的线程池SERIAL_EXECUTOR和THREAD_POOL_EXECUTOR
其实THREAD_POOL_EXECUTOR并不是新增的,之前的就有,只不过之前(Android 2.3)它是AsyncTask私有的,未公开而已。THREAD_POOL_EXECUTOR是一个corePoolSize为5的线程池,也就是说最多只有5个线程同时运行,超过5个的就要等待。所以如果使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)就跟2.3版本的AsyncTask.execute()效果是一样的。
- (Android) Download Images by AsyncTask API
- Android API Document Download
- Android API Document Download
- android download file by stream
- Images Download Address
- Ubuntu VMware Images (Download)
- Android 中文 API AsyncTask
- Android API 之 AsyncTask
- Download images stored on the R/3 document server (Uploaded by SE78)
- Windows Mobile 6 Localized Emulator Images download
- Android 中文 API (101) —— AsyncTask
- Android 中文 API (101) —— AsyncTask
- Android 中文 API (101) —— AsyncTask
- Android 中文 API (101) —— AsyncTask
- Android 中文 API (101) —— AsyncTask
- Android 中文 API (101) —— AsyncTask
- Android 中文 API (101) —— AsyncTask
- Android 中文 API—— AsyncTask
- std::unique与结构体
- 内存泄露
- Pascal's Triangle
- 《C++程序设计》笔记之-运算符重载
- 面向对象、代码块
- (Android) Download Images by AsyncTask API
- 网站建设中的三个核心要素
- JS贪吃蛇游戏
- Hibernate(六)——多对多关联映射
- 如何做好企业网站
- hdu 1823 Luck and Love(线段树)
- Locale类(一)
- EOJ gauss
- 联合主键的使用