星空网 > 软件开发 > 操作系统

Android—初识AsyncTask

      AsyncTask是用来处理一些后台的比较耗时的任务,给用户带来良好的体验。AsyncTask扩展Thread,增强了与主线程的交互能力。

      首先介绍AsyncTask中定义的以下几个方法:

      onPreExecute():该方法在执行后台操作前被UI线程调用,可以做一些准备工作,如图片加载之前先显示进度条等

      doInBackground(Params...):该方法运行在后台线程中,比较耗时的操作可以写在此方法中

      onProgressUpdate(Progress...):该方法只有在doInBackground(Params...)方法中调用了publishProgress()方法时候才会执行,用来显示后台任务的进展情况

      onPostExecute(Result): doInBackground(Params...)方法执行完毕以后,此方**被UI线程调用,可以在此方法中对UI进行操作,比如显示图片内容等

      其次是AsyncTask中的三个参数:

       Params 启动任务执行的输入参数,比如HTTP请求的URL。       

       Progress 后台任务执行的进度值。        

       Result 后台执行任务最终返回的结果。

       最后用一个异步加载网络图片的实例更好的体现AsyncTask的作用:

       首先访问网络记得加入网络访问的权限

       1.Android项目的MainActivity

       Android—初识AsyncTaskimages/loading.gif' data-original="http://images2015.cnblogs.com/blog/829069/201511/829069-20151106125830367-376815484.png" />

    

       2.新建一个Activity用来显示网络加载的图片,在此Activity中新建一个内部类继承AsyncTask详情请参考代码以及注释:

      

<RelativeLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  tools:context=".ImageActivity" >  <ImageView     android:id="@+id/imageView"        android:layout_width="match_parent"    android:layout_height="match_parent"/>  <ProgressBar    android:id="@+id/progressBar1"    android:visibility="gone"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerHorizontal="true"    android:layout_centerVertical="true" />  </RelativeLayout>

 

      Activity中:

 

package com.example.netdemo;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;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.view.Window;import android.widget.ImageView;import android.widget.ProgressBar;public class ImageActivity extends Activity {  private ProgressBar progressBar;  private ImageView imageView;  //图片的地址  private static final String URL="http://img3.3lian.com/2013/s1/20/d/57.jpg";  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    requestWindowFeature(Window.FEATURE_NO_TITLE);    setContentView(R.layout.activity_image);    findViewById();    //启动    new MyAsyncTask().execute(URL);  }  private void findViewById() {    // TODO Auto-generated method stub    progressBar = (ProgressBar) findViewById(R.id.progressBar1);    imageView = (ImageView) findViewById(R.id.imageView);  }  /**   * @String 传入的参数为图片的URL地址,String类型,   * @Void 进度值先不考虑所以返回为空,   * @Bitmap 后台执行任务最终返回的结果为一张图片Bitmap类型   * @author cyf   *   */  class MyAsyncTask extends AsyncTask<String, Void, Bitmap>{    //后台没有运行完毕之前做的准备工作,在这我们让原本隐藏的progressBar显示    @Override    protected void onPreExecute() {      // TODO Auto-generated method stub      super.onPreExecute();      //后台运行的时候进度条显示      progressBar.setVisibility(View.VISIBLE);    }    //在后台进行网络访问,得到图片并返回    @Override    protected Bitmap doInBackground(String... arg0) {      // TODO Auto-generated method stub      String url=arg0[0];      Bitmap bitmap=null;      //定义网络连接对象      URLConnection connection;      InputStream is;      try {        connection= new URL(url).openConnection();        is=connection.getInputStream();        BufferedInputStream bis=new BufferedInputStream(is);        //将输入流解析成Bipmap        bitmap=BitmapFactory.decodeStream(bis);        is.close();        bis.close();      } catch (MalformedURLException e) {        // TODO Auto-generated catch block        e.printStackTrace();      } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }      return bitmap;    }    //在次方法中接收后台返回的Bitmap值并且设置到UI    @Override    protected void onPostExecute(Bitmap result) {      // TODO Auto-generated method stub      super.onPostExecute(result);      //显示的progressBar再设置为隐藏      progressBar.setVisibility(View.GONE);      //在此方法中设置UI线程显示图片      imageView.setImageBitmap(result);          }  }}

 

上结果图:

点击button之后的准备界面(progressBar显示表示正在加载):

Android—初识AsyncTask

加载完成之后:

Android—初识AsyncTask

 

欢迎大家提供意见,希望能给大家带来帮助,谢谢。

 




原标题:Android—初识AsyncTask

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

2022亚马逊货件要求更新!涨价属违反平台政策行为,谨慎调价!:https://www.kjdsnews.com/a/775485.html
100%成功注册谷歌邮箱Gmail的方式, 真香!:https://www.kjdsnews.com/a/776441.html
货物出口退税率为0,出口都会被视同内销处理吗?:https://www.kjdsnews.com/a/776442.html
完了,芭比Q了~设错促销导致0元卖货,血亏!亚马逊促销工具要用对!:https://www.kjdsnews.com/a/776443.html
如何做出高端A+页面的新品牌故事板块:https://www.kjdsnews.com/a/776444.html
Best Buy官网网址,Best Buy是什么平台?:https://www.kjdsnews.com/a/776445.html
皇帝的皇宫=:https://www.vstour.cn/a/363188.html
海南岛琼海市旅游景点 琼海市的旅游景点:https://www.vstour.cn/a/363189.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流