Android AsyncTask

为什么要异步任务
     Android单线程模型
     耗时操作放在非主线程中执行
 
AsyncTask 在子线程中更新UI,封装、简化异步操作。
AsyncTask基本结构:
     参数: 
          AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定三个泛型参数
               Params:启动任务时输入参数的类型。
               Progress:后台任务执行中返回进度值的类型。
               Result:后台执行任务完成后返回结果的类型。
     构建AsyncTask子类的回调方法:
          dolnBackGround:必须重写,异步执行后台线程将要完成的任务。
          onPreExecute:执行后台耗时操作前被调用,通常用户完成一些初始化操作
          onPostExecute:当dolnBackground完成后,系统会自动掉用 onPostExecute()方法,并将doInBackground()方法返回的值传给该方法。
          onProgressUpdate:在doInBackground()方法中调用publishProgrogress()方法。
 
 
使用网络获得一张PNG图片
 
public class MainActivity extends ActionBarActivity {
 
        @Override
        protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
              setContentView(R.layout. activity_main);
               //开启asyncTask的异步操作
               new MyasyncTask().execute("http://stareblankly/az.png" );
       }
 
        /**
        * Params:URL类型
        * Progress : 进度值类型
        * Result : 返回值类型
        * @author az
        *
        */
        class MyasyncTask extends AsyncTask<String, integer, Bitmap>{
 
               /**
               * 最开始调用
               */
               @Override
               protected void onPreExecute() {
                      super.onPreExecute();
              }
              
               /**
               * onPreExecute完成后调用  并返回bitmap
               */
               @Override
               protected Bitmap doInBackground(String... params) {
                     String url=params[0];       //取出URL
                     Bitmap bitmap= null;
                     URLConnection Connection;
                     InputStream is;
                      try {
                            //访问网络的耗时操作
                           Connection= new URL(url).openConnection();
                           is=Connection.getInputStream();
                           BufferedInputStream bis= new BufferedInputStream(is);
                            //通过decodeStream方法解析输入流
                           bitmap=BitmapFactory. decodeStream(bis);
                           is.close();
                           bis.close();
                     } catch (IOException e) {
                            // TODO Auto-generated catch block
                           e.printStackTrace();
                     }
                      //将bitmap作为返回值
                      return bitmap;
              }
              
              
               /**
               * 最后调用  并得到doInBackground返回的bitmap
               */
               @Override
               protected void onPostExecute(Bitmap result) {
                      super.onPostExecute(result);
                      //
              }
       } 
}
stareblankly.cn
原文地址:https://www.cnblogs.com/stareblankly/p/4844213.html