Thread AsyncTask(异步任务)、Handler 更新UI

来源:互联网 发布:建筑软件有哪些 编辑:程序博客网 时间:2024/05/17 09:30

为什么使用线程更新?

         在Android开发过程中,如果,在主线程中使用耗时操作,Adnroid会时程序进入无响应状态,故此,耗时操作,必须通过子线程实现。

Therad  实现子线程刷新


  1.  建立一个类,继承Therad实现子线程刷新

class Mythread extends Thread{  public void run(){   String str="我是通过Handler,被发送的数据";   //被更新的数据  //   创建Message 对象,    Message msg=new Message();    msg.obj=str;    //发送消息   handler.sendMessage(msg);            }}

 2.建立Handler  进行循环接受子线程传递过来的值,并且更新UI
//判断当前函数是否被主线程调用的方式Looper.getMainLooper() //当前主线程运行的LooperLooper.myLooper();      Looper  循环接受消息的boolean result=Looper.getMainLooper()==Looper.myLooper();//Handler  接受消息Handler handler=new Handler(){ //处理消息(被主线程执行)  public void handlerMessage(Message msg){      //接受通过Message 和Handler 传递过来的值      String str=(String)msg.obj;   }}




AsyncTask  异步任务,优化后的Handler,它封装了Handler的方法

简介:AsyncTask   是产生一个线程池,当你使用完一个线程后,它回到线程池

  1. 继承AsyncTask 
    class MyAsycTask extends AsyncTask {        /**         * 被主线程执行,在doInBackground() 函数之前执行         */        @Override        protected void onPreExecute() {            super.onPreExecute();            //可以用来,执行一些,提示        }        /**         * 被子线程执行,用来处理耗时操作         */        @Override        protected Object doInBackground(Object[] params) {            //推送数据,类型Object  支持任何数据类型            publishProgress();            return null;        }        /**         * 推送的数据,是被推送到,本方法中         */        @Override        protected void onProgressUpdate(Object[] values) {            //super.onProgressUpdate(values);        }        /**         * 被主线程执行,在doInBackground() 函数之后执行         */        @Override        protected void onPostExecute(Object o) {            //super.onPostExecute(o);            //更新UI        }    }}



  2.  MyAsycTask myAsycTask=new MyAsycTask();
      myAsycTask.execute();  调用


原创粉丝点击