异步消息处理机制(Handler)

2019-11-14  本文已影响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() 方法。

上一篇 下一篇

猜你喜欢

热点阅读