• 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

  • 相关阅读:
    Thinkcmf:页面常用函数
    thinkcmf开发--关于控制器
    thinkcmf 常用操作
    Thinkcmf 二次开发
    Sublime Text 3 快捷键精华版
    php动态更改post_max_size, upload_max_filesize等值
    Jquery使用小技巧
    jQuery常用方法和函数
    三层架构
    JDBC
  • 原文地址:https://www.cnblogs.com/qiengo/p/2828005.html
Copyright © 2020-2023  润新知