Android学习笔记---AsyncTask

在开发Android应用时必须遵守单线程模型的原则.Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。

在单线程模型中始终要记住两条法则: 

1. 不要阻塞UI线程 (当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。)

2. 确保只在UI线程中访问Android UI工具包

那么我们在UI线程显示的同时,又要并发的处理一些其他的数据或者操作时,怎么办?就需要用到Android1.5提供的一个工具类AsyncTask(异步任务)

使用方法:

1.要有一个类继承AsyncTask,在AsyncTask中会有三种泛型Params,Progress和Result,他们的作用分别是

Params ----> 任务执行器需要的数据类型,即启动任务执行的输入参数,

Progress---->后台计算中使用的进度单位,即后台执行任务的百分比

Result------->后台计算后返回结果的数据类型,也就是后台执行任务最终返回的结果的数据类型

实现例如:

    class myAsyncTask  extends AsyncTask<Params, Progress, Result>{
         protected void onPreExecute() {
            该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
        }

       protected ArrayList<Joke> doInBackground(String...params) {
             将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任  务进度。该方法是抽象方法,子类必须实现。    

    return null;
        }
        protected void onPostExecute(ArrayList<Joke> result) {
           在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.

        }
     
        protected void onProgressUpdate(Void... values) {
           在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
        }

在使用时,这样用
 private void loadData() {
        myAsyncTask   dataTask = new myAsyncTask ();
        dataTask.execute(“”); //这里的参数就是第一个泛型的数据类型,也就是在doInBackground()方法中的输入参数
    }
       为了正确的使用AsyncTask类,以下是几条必须遵守的准则: 
  1) Task的实例必须在UI thread中创建 
  2) execute方法必须在UI thread中调用 
  3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法 
  4) 该task只能被执行一次,否则多次调用时将会出现异常 
      doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。 
   

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值