异步任务——AsyncTask的使用

来源:互联网 发布:python 最小值 索引 编辑:程序博客网 时间:2024/04/26 07:20

一、AsyncTask子类的参数

        AsyncTask<Parms,Progress,Result> 是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数:

             1、Params:启动任务时输入参数的类型

          2、Progress:后台任务执行中返回进度值的类型

          3、Result:后台执行任务完成后返回结果的类型

MyAsyncTask.java继承自AsyncTask

import android.os.AsyncTask;public class MyAsyncTask extends AsyncTask<Void, Void, Void> {/** * 必须重写,异步执行后台线程将要完成的任务 */@Overrideprotected Void doInBackground(Void... params) {// TODO Auto-generated method stubreturn null;}/** * 执行后台耗时操作前被调用,通常用户完成一些初始化操作 */@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();}/** * 当doInBackground()完成后,系统会自动调用该方法,  * 并将doInBackground方法的返回值传递给该方法 */@Overrideprotected void onPostExecute(Void result) {// TODO Auto-generated method stubsuper.onPostExecute(result);}/** * 在doInBackground()方法中调用publishProgress()方法更新任务的执行进度后  * 就会触发该方法 */@Overrideprotected void onProgressUpdate(Void... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);}}
该异步任务的调用
        //启动该异步任务        MyAsyncTask myAsyncTask = new MyAsyncTask();        myAsyncTask.execute();
接下来展示一个从网络下载图片的异步任务MainActivity.java
import java.io.BufferedInputStream;import java.io.IOException;import java.net.MalformedURLException;import java.net.URLConnection;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 MainActivity extends Activity {private ImageView mImageView;private ProgressBar mProgressBar;private static String URL = "http://img5.duitang.com/uploads/item/201508/10/20150810183747_8TuAK.jpeg";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);mProgressBar = (ProgressBar) findViewById(R.id.pb);mImageView = (ImageView) findViewById(R.id.iv);// 启动该异步任务MyAsyncTask asyncTask = new MyAsyncTask();asyncTask.execute(URL);}class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {/** * 执行后台耗时操作前被调用,通常用户完成一些初始化操作 */@Overrideprotected void onPreExecute() {super.onPreExecute();mProgressBar.setVisibility(View.VISIBLE);}/** * 必须重写,异步执行后台线程将要完成的任务 */@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap = null;String url = params[0];URLConnection connection;try {connection = new java.net.URL(url).openConnection();BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());bitmap = BitmapFactory.decodeStream(bis);bis.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return bitmap;}/** * 当doInBackground()完成后,系统会自动调用该方法, 并将doInBackground方法的返回值传递给该方法 */@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);mProgressBar.setVisibility(View.GONE);mImageView.setImageBitmap(result);}/** * 在doInBackground()方法中调用publishProgress()方法更新任务的执行进度后 就会触发该方法 */@Overrideprotected void onProgressUpdate(Void... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);}}}
MainActivity的布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <ImageView        android:id="@+id/iv"        android:layout_width="fill_parent"        android:layout_height="fill_parent" />    <ProgressBar        android:id="@+id/pb"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:visibility="gone" /></RelativeLayout>



1 0
原创粉丝点击