美文网首页
异步消息处理机制(Handler)

异步消息处理机制(Handler)

作者: 小李同学今天博学了吗 | 来源:发表于2019-11-14 16:43 被阅读0次

    一.Handler机制

    Handler的机制主要有四个关键对象
    1.Message:是在线程间通信的消息,what可以携带int的标识,obj可以携带对象
    2.Handler:主要用于发送消息和处理消息,(不能直接生成其对象,不然会有警告,原因是因为handler会隐式持有一个外部类的对象,但是当activity被回收时,handler还持有引用,这样会造成activity无法被回收,容易造成内存泄漏),可以创建一个handler继承Handler,为其添加一个对Activity的弱引用,

    private static class MyHandler extends Handler{
      private final WeakReference<MainActivity> mActivity;
      public MyHandler(MainActivity activity){
          this.mActivity = new WeakReference<MainActivity>(activity);
      }
    
      @Override
      public void handleMessage(Message msg){
          MainActivity mainActivity = mActivity.get();
          if(mainActivity == null){
            return;
          }
      }
    }
    

    3.MessageQueue:这个主要是存放handler发送的消息message。
    4.Looper:这个为消息泵,俗称钩子,他会一直循环,他的作用就是去消息队列中取消息。

    二.AsyncTask

    这个工具内封装了Handler,让我们在主、分线程中切换更加方便
    用法:由于他是一个抽象类,所以我们需要定义一个类去继承它

      class DownLoadTask extends AsyncTask<Void,Integer,Boolean>{
      // Void: 这个参数表示在执行asynctask时不需要传入参数,可以改为其他的
      // integer,为操作进行的进度,可以用于进度条中
      //Boolean 为当操作执行完之后返回的类型
        //开始前的方法 (例如显示进度条)
        @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
            //在子线程运行的耗时操作 (例如下载)
            @Override
            protected Boolean doInBackground(Void... voids) {
                return null;
            }
            //Ui线程进行更新进度 (例如更新进度条)
            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
                //publishProgresss 实时发送进度至onPostExecute方法中
            }
            //当子线程的方法执行完毕后调用的方法 ,(例如提示更新完成)
            @Override
            protected void onPostExecute(Boolean aBoolean) {
                super.onPostExecute(aBoolean);
            }
    }
    

    调用时为生成其对象,调用 excute() 方法。

    相关文章

      网友评论

          本文标题:异步消息处理机制(Handler)

          本文链接:https://www.haomeiwen.com/subject/jwvrictx.html