一:Handler的作用
1.实现线程之间的通信:在非UI线程(子线程)中完成耗时操作,在UI线程(主线程)中更新UI操作。
2.通过postDelayed(Runnable r,millies m)方法在主线程中发送延迟消息。
二:Handler、Looper、Message、MessageQueue
1.在一个线程中只能创建一个Looper,一个Looper只能创建一个MessageQueue。但是在一个线程中可以创建多个Handler实例。
2.一个Handler实例只能绑定一个Looper和MessageQueue。
3.主线程会默认自动创建一个Looper和MessageQueue,所以可以直接在主线程创建Handler实例。而子线程中不会默认创建Looper和MessageQueue,所以在子线程中创建Handler实例时需要先调用Looper.prepare()方法在子线程创建一个Looper。
4.在创建Handler实例时如果不指定绑定的Looper,则系统默认绑定当前线程(创建Handler实例的线程)的Looper。所以在主线程创建Handler实例时可以直接使用"Handler handler = new Handler()"语句,其构造参数可以为空。在子线程创建Handler实例时需要先调用Looper.prepare()方法和Looper.loop()方法创建并打开一个Looper,然后再使用"Handler handler = new Handler(Looper.myLooper()/getMainLooper())"语句,其中构造参数Looper.myLooper()表示绑定该线程