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

Android线程之AsyncTask

  在之前的博客中为大家分享过关于Android多线程处理,想必大家对于Android为什么要使用多线程已经有了清晰的认识,我就在简单唠两句,Android规定UI界面的更新必须在在主线程进行,对于访问网络的耗时操作必须在子线程中执行,所以如果你想成为一名真正的Android开发工程师,多线程是你的必修课。本篇带给大家关于Android为我们封装好的一个简单的线程类AsyncTask。

  AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.对于AsyncTask的详细介绍请大家查看:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html

  AsyncTask中Android为我们封装了四个方法,具体的介绍请看下图:

  Android线程之AsyncTaskimages/loading.gif' data-original="http://images.cnitblog.com/blog2015/618613/201505/032117130529181.png" width="468" height="251" />

  看到这里你大概对于AsyncTask已经有了一定的认识,下面我将以一个进度条效果带领大家进一步了解它。

  我们的布局文件activity_main.

<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=".MainActivity" >  <ProgressBar    android:id="@+id/progressBar1"    style="?android:attr/progressBarStyleHorizontal"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_centerHorizontal="true"    android:layout_centerVertical="true" /></RelativeLayout>

  我们的主Activity:

public class MainActivity extends Activity {  private ProgressBar mProgressBar;  private MyAsyncTask mTast;    @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);    mTast = new MyAsyncTask();//创建我们自定义的AsyncTask    mTast.execute();      }  //防止我们重新打开时,线程出现等待  @Override  protected void onPause() {    super.onPause();    if(mTast != null && mTast.getStatus() == AsyncTask.Status.RUNNING){      //cancel()方法只是将对应的AsyncTask标记为cancel状态,并不是真正的取消线程的执行。      mTast.cancel(true);    }  }    class MyAsyncTask extends AsyncTask<Void, Integer, Void>{    //doInBackground()方法是AsyncTask中四个方法中唯一的不在主线程执行的方法    @Override    protected Void doInBackground(Void... arg0) {      for(int i=0; i<100; i++){        if(isCancelled()){//判断cancel的状态          break;        }        publishProgress(i);        try {          Thread.sleep(300);//模拟网络加载        } catch (InterruptedException e) {          e.printStackTrace();        }      }      return null;    }        @Override    protected void onProgressUpdate(Integer... values) {      super.onProgressUpdate(values);      if(isCancelled()){//判断cancel的状态        return;      }      mProgressBar.setProgress(values[0]);    }      }  }

  代码上没有什么难点,关键部位已经为大家注释,大家如果还有疑问,请留言讨论。

  




原标题:Android线程之AsyncTask

关键词:Android

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

沃尔玛迎战亚马逊,正式在这些市场推出“一日达”!:https://www.ikjzd.com/articles/93755
涵盖3805种产品的新征税清单,哪些行业最受影响?:https://www.ikjzd.com/articles/93758
新品开发愁?用好外网掌握这两招即可!:https://www.ikjzd.com/articles/93759
亚马逊跟卖是什么?跟卖与反跟卖秘笈小白必备:https://www.ikjzd.com/articles/93760
如何在Lazada开店?Lazada的优点有哪些?:https://www.ikjzd.com/articles/93767
如何发现目标产品的市场需求?:https://www.ikjzd.com/articles/93768
小米SU7的不甘心全写进了 “周边”的商品链接里 :https://www.kjdsnews.com/a/1836549.html
10天涨粉300+万 “王婆说媒”凭什么一夜爆红? :https://www.kjdsnews.com/a/1836550.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流