zoukankan      html  css  js  c++  java
  • Android--异步消息处理机制

    一、异步消息处理机制:

      1)由四个部分组成:Message、Handler、MessageQueue 和 Loope

        --Message: 在线程之间传递的消息,它可以在内部携带少量信息,用于在不同线程之间交换数据;

        --Handler: 主要用发送和处理消息(Message),发送消息:sendMessage(Message msg); 处理消息:handleMessage(Message msg);

        --MessageQueue:消息队列,每个线程中只有一个消息队列,用于存放所有通过Handler发送的消息;

        --Looper:是每个线程中的MessageQueue 的管家,调用其 loop() 方法后就会进入到一个无限循环当中,然后每当发现MessageQueue 中存在一条消息,就会将它取出,并传递到Handler 的handleMessage()方法中,每个线程也只有一个 Looper;

      2)流程:

        --在主线程中创建一个 Handler 对象,并重写其 handleMessage() 方法;

        --当子线程中需要操作 UI 时,就创建一个 Message 对象,并通过创建的 Handler 对象将其发送出去;

        --发送的 Message 会被添加到 MessageQueue 队列中等待被处理;

        --而 Looper 则会一直尝试从消息队列中去取出消息,最后分发给 Handler 对象的handleMessage() 进行处理;

        --在 handlerMessage() 方法中可以随意操作 UI, 从而达到目的;

    二、AsyncTask:一个异步消息处理的工具,使用更为方便,基本用法:

      1)AsyncTask是一个抽象类,使用时需要创建一个子类来继承它;

      2)在继承时我们可以为AsyncTask 类指定三个泛型参数,这三个参数的用途如下:

        --Params:在执行 AsyncTask时需要传入的参数,可用于在后台任务中使用;

        --Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位。

        --Result:当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型;

        --例:

    class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
    ……
    }

       3)需要重写 AsyncTask 中的几个方法才能完成对任务的定制:

        --onPreExecute():这个方法会在后台任务开始执行之前调用,用于进行一些界面上的初始化操作;

        --doInBackground(Params...):这个方法中的所有代码都会在子线程中运行,所有的耗时任务都应该在这里进行处理。任务一旦完成就可以通过return 语句来将任务的执行结果返回。这个方法中不能进行 UI 操作,如果需要更新UI 元素,可以调用publishProgress(Progress...)方法来完成;

        --onProgressUpdate(Progress...):当在后台任务中调用了publishProgress(Progress...)方法后,此方法被调用,方法中携带的参数就是后台任务中传递而来的,在此方法中可以对 UI 进行操作;

        --onPostExecute(Result):当后台任务执行完毕并通过return 语句进行返回时,此方法被调用,返回的数据会作为参数传递到此方法中,可以利用返回的数据来进行一些UI 操作;

      4)创建完毕 AsyncTask 对象之后只需要调用其 execute() 方法即可启动任务;

      5)总结:

        --在doInBackground()方法中去执行具体的耗时任务;

        --在onProgressUpdate()方法中进行UI 操作;

        --在onPostExecute()方法中执行一些任务的收尾工作。

  • 相关阅读:
    Linux Shell 文本处理工具集锦--Awk―sed―cut(row-based, column-based),find、grep、xargs、sort、uniq、tr、cut、paste、wc
    ACME[free https] Linux中使用curl命令访问https站点4种常见错误和解决方法
    php composer,update-ca-trust
    bootloader,kernel,initrc
    linux devcie lspci,lscpu,blkdiscard,fstrim,parted,partprobe,smartctl
    剖析Docker文件系统:Aufs与Devicemapper
    Linux 内核中的 Device Mapper 机制
    MapReduce报错:Error: java.io.IOException: Initialization of all the collectors failed. Error in last collector was :interface javax.xml.soap.Text
    hadoop运行报错Wrong FS: hdfs:/, expected: file:///
    Hadoop 伪分布式上安装 Hive
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5283578.html
Copyright © 2011-2022 走看看