AsyncTask和Handler选谁

 1. AsyncTask
    AsyncTask作为轻量级的线程处理类适用于简单的异步处理。
private class MyAsyncTask extends AsyncTask<String,Integer,String>{

        /**
         * 该方法在execute()前调用,常用于一些进度条对话框的显示
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        /**
         * @param params 启动任务时execute()的参数类型,如URL
         * */
        @Override
        protected String doInBackground(String... params) {

            //后台耗时操作,该方法内不能直接更新UI

            //通过publishProgress()来更新任务的进度
            return null;
        }

        /**
         * @param values 后台任务执行的百分比
         * 多用于显示任务执行进度,在主线程中执行
         * */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

        /**
         * @param s 任务执行结束后的结果
         * 参数为最后执行的返回结果,主线程中执行,操作UI
         * */
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
        }
    }

使用注意事项:
       1.初始化以及execute()的调用必须在UI线程中。
       2.一个初始化对象只能调用一次,否则会报异常。
 
2.Handler
      Handler的使用涉及到 Handler, Looper, Message,Thread四个对象。具体实现为:在Thread内部生成Message, Looper获取Message之后传递给Handler, Handler逐个获取Looper内的Message并处理,进行UI的更新。
     注:Handler只能对具有Looper的消息进行处理,UI线程默认实现了Looper。可在线程中调用Looper.prepare();Looper.loop()来建立消息队列以及进行消息的循环。
private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //进行消息的处理
            
        }
    };
    
private class MyTread extends Thread{
        @Override
        public void run() {
            super.run();
            Message message = new Message();
            //message.what = ;
            //message.obj = ;
            handler.sendMessage(message);
        }
    }
 
3.二者比较
    Handler:
    优点:结构清晰,功能定义明确。多个后台任务简单明了。
    缺点:只有一个后台任务时,代码量较大。
    AsyncTask:
   优点:过程可控,简单快捷
   缺点:多个后台任务更新 UI时复杂。
 
综上:具体使用还请参考项目实际需求。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值