zoukankan      html  css  js  c++  java
  • android: AsyncTask vs handler

      AsyncTask实际上就是一个线程池,AsyncTask在代码上比handler要轻量级别,而实际上要比handler更耗资源,因为AsyncTask底层是一个线程池!而Handler仅仅就是发送了一个消息队列,连线程都没有开。
    但是,如果异步任务的数据特别庞大,AsyncTask这种线程池结构的优势就体现出来了

     

    android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。

    我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件

    AsyncTask是抽象类,定义了三种泛型类型 Params,Progress,Result。

    Params 启动任务执行的输入参数,比如HTTP请求的URL

    Progress 后台任务执行的百分比。

    Result 后台执行任务最终返回的结果,比如String

    用程序调用,开发者需要做的就是实现这些方法。

    1) 子类化AsyncTask

    2) 实现AsyncTask中定义的下面一个或几个方法

    onPreExecute(),该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。

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

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

    该方法可与UI线程交流,比较耗资源。

    onPostExecute(Result),在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.

    For detail: http://blog.csdn.net/zhenyongyuan123/article/details/5832727

    Reprinted from:http://www.cnblogs.com/-OYK/archive/2011/08/03/2126657.html

  • 相关阅读:
    PHP 操作MySQL时mysql_connect( )和Mysqli( )的两种报错机制
    OS + macOS Mojave 10.14.4 / sushi / ssh-keygen / ssh-copy-id
    script ajax / XHR / XMLHttpRequest
    java socket / No buffer space available
    OS + Ubuntu ARM Android
    mysql中批量替换数据库中的内容的sql
    linux下ubuntu系统安装及开发环境配置
    PHP 截取字符串专题
    在Ubuntu中用root帐号登录
    理解javascript的caller,callee,call,apply概念
  • 原文地址:https://www.cnblogs.com/qiengo/p/2828005.html
Copyright © 2011-2022 走看看