"AsynchTask和Handler"的区别与用法-Android异步消息处理机制之图文代码详解

AsyncTask和Handler的区别介绍:

下面开始讲解异步机制,主线程和子线程的交互问题,涉及到两个最常用的类.

一.AsyncTask

特点:

  • 1.android提供的”轻量级”异步类.

  • 代码上比handler轻量级,但更耗性能.
  • 2.自定义类直接继承AsyncTask即可实现异步操作.
  • 3.通过提供的接口可观测到:把当前异步执行的程度反馈给UI.

方法,参数:

两个核心的:
  • 1.doInBackground(Params…)后台执行的”耗时操作”,处理参数,返回结果,配合publishProgress方法可以定时改变onPreogressUpdate方法从而实现定时更新进度.
  • 2.onPostExecute(Result)处理得到的结果,在主线程处
    理想要处理的.

    三个个性化的:
  • 1.onPreExecute()执行任务前的操作:例如,显示进度对话框

  • 2.onProgressUpdate(Progress),可以更新进度,增加用户体验
  • 3.onCancelled(),用户取消时要做的操作

    注意点:
  • 1.实例,和execute()方法都要在UI线程创建

  • 2.不要”手动”调用上述的方法.
  • 3.task只能被执行一次.

1.优点:

简单快捷,过程可控制,降低开发难度(都给出明确的方法名了)

2.缺点:

"多个"异步操作并进行UI变更的时候,就变得复杂了
AsychTask代码详情
    import android.os.AsyncTask;
    /** 
    *  
    * @author chenzheng_java 
    * @description 异步任务AcyncTask示例 
    *     
    */
    public class MyAsyncTask extends AsyncTask<String, Integer, Object> {

        /** 
        * 执行异步任务前的UI操作,例如:"进度对话框"和某项"前期功能". 
        */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        /** 
        * 该方法在后台进行耗时操作。 
        * 该方法在onPreExecute方法之后进行,执行过程中,可以定时调用"publishProgress"方法,从而改变onProgressUpadate.
        */
        @Override
        protected Object doInBackground(String... params) {
            return null;
        }

        /** 
        * doInBackground中调用了publishProgress之后,ui线程就会 
        * 调用该方法,通常我们才此方法进行进度条的更新,让用户更好的体验。 
        */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

        /** 
        * 当doInBackground执行完毕之后,可执行此方法,此方法在UI线程. 
        */
        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
        }
    }

详情用法:
这里写图片描述


二.Handler

特点:

  • 1.Handler在主线程(UI)中,和子线程可以通过”Message对象”来传递数据.
  • 2.Handler承担接收子线程传过来的(子线程用handler.sendMessage()方法传递)的”Message信息对象(里面包含了数据)”.
  • 3.把主线程放入”主线程队列”中,配合主线程更新UI

handler结构图:
这里写图片描述

handler中的方法功能:

(点击访问完整的参数讲解)

  • 1.子线程中开启

    1.post(runnable)//能在主线程更新UI
    2.postAtTime(runnable,long)//定时执行
    3.postDelayed(runable,long)//延迟执行
    
  • 2.子线程中发消息的

    1.sendMessage(Message);//标准的发消息
    2.sendEmptyMessage(int flag);//发空消息,带个标记识别确认.
    3.sendMessageAtTime(Message,long);//定时发消息
    4.sendMessageAtTime(Message,long);//延迟多久发消息.
    

1.优点:

结构清晰,功能明确,利于多个后台任务的处理.

2.缺点:

单个后台异步处理时,显得代码过多,机构复杂.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值