android两种异步实现方式总结(一)

第一种:AsyncTask

AsyncTaskandroid提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度,最后反馈执行结果给UI主线程。它比Handler更轻量级。

一个task实例只能调用一次。

AsyncTask提供了三种泛型参数,并重载至少一个方法。

三个参数:

parames:启动任务输入的参数,比如url

progress:后台执行任务的百分比

result:后台执行任务最终返回的结果

     几个方法:

doInBackground(params..):耗时的后台操作,这里不能进行ui主线程更新操作,可以用publishProgress来更新进度

onPostExecute(Result):类似于Handler中更新UI主线程

onProgressUpdate(Progress...):增加进度条,提高用户体验度

onCancelled():用户调用取消时要做的操作

    优点:

简单,快捷

过程可控

   缺点:

在使用多个异步操作并需要进行UI更新时就变得复杂起来

 

   使用场景:

改善设计,少用异步,线程的开销是很大的

与主线程有交互时使用AsyncTask,否则用Thread即可

对于有需要大量线程执行任务时,一定要创作线程池

对于想要立即开始执行的异步任务,要么直接使用Thread,要么单独创建线程池提供给AsyncTask

1. task.executeOnExecutor(Executors.newCachedThreadPool()); 无限制线程池

2. Executors.newFixedThreadPool(7);最大值为7的线程池

3. Executors.newSingleThreadExecutor():单个线程的线程池

 

代码:

public class MyAsyncTask extends AsyncTask<Integer, Integer, String>

{

    private ProgressBar progressBar;   

    public MyAsyncTask(ProgressBar progressBar)

    {

        super();

        this.progressBar = progressBar;

    }

    @Override

    protected String doInBackground(Integer... arg0)

    {

        int i = 0;

        for (i = 0; i <= 100; i += 10)

        {

            try

            {

                Thread.sleep(300);

            }

            catch (InterruptedException e)

            {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            publishProgress(i);

        }

        String result = (i - 10) + arg0[0].intValue() + "";

        return result;

    }

    @Override

    protected void onPostExecute(String result)

    {

    }

    @Override

    protected void onPreExecute()

    {

    }

    @Override

    protected void onProgressUpdate(Integer... values)

    {

        int value = values[0];

        progressBar.setProgress(value);

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值