美文网首页
AnsyncTask异步任务

AnsyncTask异步任务

作者: JuSong | 来源:发表于2017-03-06 14:51 被阅读0次

相关概念:

1)什么是多线程:

进程:运行中的程序

线程:比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行! 线程是由程序负责管理的!!!而进程则是由系统进行调度的!!!

多线程:并行的执行多条指令。

2)同步与异步的概念:

同步:当我们执行某个功能时,在没有得到结果之前,这个调用就不能返回!简单点就是说必须 等前一件事做完才能做下一件事;

异步:和同步则是相对的,当我们执行某个功能后,我们并不需要立即得到结果,我们额可以正常地 做其他操作,这个功能可以在完成后通知或者回调来告诉我们;

 

Android为什么要引入异步任务?

Android程序刚启动时,会同时启动一个对应的主线程(Main Thread),这个主线程主要负责处理 与UI相关的事件!有时我们也把他称作UI线程!而在Android App时我们必须遵守这个单线程模型的规则: Android UI操作并不是线程安全的并且这些操作都需要在UI线程中执行! 假如我们在非UI线程中,比如在主线程中new Thread()另外开辟一个线程,然后直接在里面修改UI控件的值; 此时会抛出下述异常: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views 另外,还有一点,如果我们把耗时的操作都放在UI线程中的话,如果UI线程超过5s没有响应用于请求,那么 这个时候会引发ANR(Application Not Responding)异常,就是应用无响应~ 最后还有一点就是:Android 4.0后禁止在UI线程中执行网络操作~不然会报: android.os.NetworkOnMainThreadException

 

通过下述两种方法进行UI更新:

  • 前面我们学的Handler,我们在Handler里写好UI更新,然后通过sendMessage()等的方法通知UI 更新。
  • 利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,更新UI时,把Runnable 对象传进来即可~
  •  

     

    AsyncTask全解析:

    AsyncTask是一个抽象类,一般我们定义一个类继承AsyncTask然后重写他的方法。

    AsyncTask的基本结构:

    1.构建AysncTask子类的参数:

    AsyncTask和handler一样适用于处理异步任务的,AsyncTask代码量更为轻量级,后台是一个线程池,在异步任务数据比较庞大时,AsyncTask线程池的优势就体现出来了。

    AsycTask<params,progress,Result>

    params:启动任务执行输入的参数,比如http请求的url

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

    result:后台执行任务完成后返回的结果

     

    2.相关方法与执行流程:

     

    3.注意事项:

     

     

    自定义AsyncTask:

     

    public class MyAsyncTask extends AsyncTask<Integer,Integer,String>
    {
    private TextView txt;
    private ProgressBar pgbar;

    public MyAsyncTask(TextView txt,ProgressBar pgbar)
    {
    super();
    this.txt = txt;
    this.pgbar = pgbar;
    }


    //该方法不运行在UI线程中,主要用于异步操作,通过调用publishProgress()方法
    //触发onProgressUpdate对UI进行操作
    @Override
    protected String doInBackground(Integer... params) {
    DelayOperator dop = new DelayOperator();
    int i = 0;
    for (i = 10;i <= 100;i+=10)
    {
    dop.delay();
    publishProgress(i);
    }
    return i + params[0].intValue() + "";
    }

    //该方法运行在UI线程中,可对UI控件进行设置
    @Override
    protected void onPreExecute() {
    txt.setText("开始执行异步线程~");
    }


    //在doBackground方法中,每次调用publishProgress方法都会触发该方法
    //运行在UI线程中,可对UI控件进行操作


    @Override
    protected void onProgressUpdate(Integer... values) {
    int value = values[0];
    pgbar.setProgress(value);
    }
    }

    相关文章

    • AnsyncTask异步任务

      相关概念: 1)什么是多线程: 进程:运行中的程序 线程:比进程更小的执行单元,每个进程可能有多条线程,线程需要放...

    • 7.1 AnsyncTask异步任务

      简介:官方封装好的轻量级异步类,是对Thread+Handler良好的封装 基本结构 AsyncTask是一个抽象...

    • 3.7 AnsyncTask异步任务

      标注:本文为个人学习使用,仅做自己学习参考使用,请勿转载和转发2018-07-10: 初稿,小冰块加可乐真好。参考...

    • android之AnsyncTask异步任务

      本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们...

    • 7 多线程机制

      1.基本多线程概念参考java基础文集 2.AnsyncTask异步任务 3.Handler消息传递机制 多线程相...

    • Android回顾--(八) 异步任务、Handler通信

      异步任务: 什么是异步任务?一切使用多线程完成的任务均可以称为异步任务-->使用线程来完成任务。 异步任务的优缺点...

    • 一次性能调优总结

      批量任务和异步任务,批量任务采用分发方式,批量任务生产异步任务。总的情况是批量任务的生产速度大于异步任务的消耗速度...

    • 异步任务

      需求: 同样的任务,启动多次,多个异步任务(比如3个)按照顺序(A,B,C)分别启动,只保留最后一个任务的结果。 ...

    • springboot之异步方法

      异步任务 Configuration配置: 需要@EnableAsync注解开启异步功能。spring异步任务是通...

    • java多线程(核心篇)第九章

      第九章 Java异步编程 9.1 同步计算与异步计算 以异步方式执行的任务,称之为异步任务,其任务的发起与任务的执...

    网友评论

        本文标题:AnsyncTask异步任务

        本文链接:https://www.haomeiwen.com/subject/cwqugttx.html