• 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
  • 相关阅读:
    四则运算题目生成器
    个人博客作业Week1
    M1/M2项目阶段总结
    个人博客作业week7
    个人博客作业—2
    第一周个人博客作业
    关于生成四则运算式
    个人博客作业week7
    第二次博客作业
    关于webservice大数据量传输时的压缩和解压缩
  • 原文地址:https://www.cnblogs.com/stareblankly/p/4844213.html
Copyright © 2020-2023  润新知