Android 异步任务AsyncTask类的简单使用
来源:互联网 发布:情侣店铺淘宝 编辑:程序博客网 时间:2024/04/30 04:57
* 说实话,对应这个类,我还是比较陌生的。虽然知道是大概是怎么一回事。但是没有具体的去使用过。一般都是new Thread()+Handler去解决子线程更新UI的问题。
* 不过看了慕课网 http://www.imooc.com/video/7314 对于AsyncTask的讲解,非常容易理解,于是就写了一个简单的使用AsyncTask加载网络图片的Demo。
1. 加载网络资源,添加一个用户权限:
<uses-permission android:name="android.permission.INTERNET" />
2.写一个布局文image_activity.xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/imageview" android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/action_settings" android:padding="16dp" /> <ProgressBar android:id="@+id/progressbar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" /></RelativeLayout>
3.Activity代码:(使用AsyncTask加载网络图片)
package com.example.asynctask;import java.io.BufferedInputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import android.annotation.SuppressLint;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.ProgressBar;public class ImageTestActivity extends Activity {private static final String URL = "http://news.cnr.cn/native/gd/20150930/W020150930482969794794.jpg";//private static final String URL1 = "http://diopic.net/images/2015/10/02/ebcf3a897c69cacc2ee81a47751defa4.jpg";private static final String URL2 = "http://att.bbs.duowan.com/forum/201304/18/0932088bi83i3si8s8gdbb.jpg";private ImageView imageView;private ProgressBar progressBar;private MyAsyncTask task;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.image_activity);imageView = (ImageView) findViewById(R.id.imageview);progressBar = (ProgressBar) findViewById(R.id.progressbar);task = new MyAsyncTask();task.execute(URL2);}@Overrideprotected void onPause() {if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {task.cancel(true);}super.onPause();}/** * 加载网络图片的异步任务<br> * String--传入的参数, Void--进度参数, Bitmap--返回参数 */class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {@Overrideprotected void onPreExecute() {// 异步任务开始执行前调用的方法UIsuper.onPreExecute();progressBar.setVisibility(View.VISIBLE);progressBar.setMax(100);}@Overrideprotected void onPostExecute(Bitmap result) {// 异步任务执行完成调用的方法 UIsuper.onPostExecute(result);progressBar.setVisibility(View.GONE);if (result == null) {imageView.setImageResource(R.drawable.ic_launcher);} else {imageView.setImageBitmap(result);}}@SuppressLint("NewApi")@Overrideprotected Bitmap doInBackground(String... params) {if (isCancelled()) {return null;}// 异步任务执行耗时操作调用的方法 非UIBitmap bitmap = null;String url = params[0];URLConnection connection;InputStream is;try {for (int i = 0; i < 88; i++) {publishProgress(i);//Thread.sleep(100);}connection = new URL(url).openConnection();is = connection.getInputStream();System.out.println("isLegnth=" + is.available());BufferedInputStream bis = new BufferedInputStream(is);bitmap = BitmapFactory.decodeStream(bis);System.out.println("bitmap=" + bitmap.getByteCount());bis.close();is.close();} catch (Exception e) {e.printStackTrace();}return bitmap;}@Overrideprotected void onProgressUpdate(Integer... values) {if (isCancelled()) {return;}super.onProgressUpdate(values);progressBar.setProgress(values[0]);}}}
代码运行ok.
* 关于AsyncTask,有几点注意:
* * 1. 就是AsyncTask的三个参数:<Params, Progress, Result> 分别是:Params=需要传入的参数(可以不传,不传就Void);Progress=显示进度的参数。(一般是Integer,或者不搞进度就Void); Result=异步任务执行的结果。比如我是需要加载图片,那么我就让Result=Bitmap。(没有返回结果就Void);
* * 2. AsyncTask有一个task.cancel();的方法,以及一个 task.isCancelled();方法。一个是发送取消异步任务的请求,一个是判断是否发送过这样的请求。一般可以通过isCancelled();的方法去改变doInBackground(..);方法里面的逻辑,比如:如果有取消的请求,就提前return,否则就正常执行。
0 0
- Android 异步任务AsyncTask类的简单使用
- Android异步任务之AsyncTask的使用
- Android 异步任务 AsyncTask 的使用总结
- Android 异步任务AsyncTask的使用
- Android中异步任务AsyncTask的使用
- Android AsyncTask异步任务的使用
- Android 异步任务AsyncTask的使用
- 简单的异步任务AsyncTask
- Android异步任务AsyncTask使用
- AsyncTask异步任务类的使用
- android的异步任务AsyncTask
- 异步任务AsyncTask的使用
- AsyncTask异步任务的使用
- Android中的AsyncTask异步任务的简单介绍
- Android中的AsyncTask异步任务的简单实例
- AsyncTask异步任务类使用
- Android带进度条的文件上传,使用AsyncTask异步任务
- Android中AsyncTask(异步执行任务)的使用
- 1159 Common Subsequence【lcs】
- CmsEasy数据库连接配置
- .htaccess 详解
- 查询人数最多的部门的信息
- 安卓控件使用系列8:Button按钮几个重要事件的使用
- Android 异步任务AsyncTask类的简单使用
- JAVA学习第10天
- stl的hashtable底层实现
- C++源代码免杀之函数的动态调用
- pat1001A+B Format (20)
- Android Activity生命周期
- Crashing Robots(模拟,有点像搜索)
- securityoverridehacking challenge 解题思路汇总——Programming
- iOS 集成支付宝支付