Handler类被用来注册到一个线程中,这样能够提供一个简单的通讯渠道,用来发送数据到这个线程。
可做为UI线程与后台线程交互的几种方法之一。html
队列action在其余线程上被执行;android
looper 主要功能是为特定单一线程运行一个消息环。ide
通常状况下,在一个线程建立时他自己是不会产生他特定单一的looper的(主线程是个例外)。所以咱们须要手动的把一个looper与线程相关联。其方法只需在须要关联的looper的线程中调用Looper.prepare。以后咱们再调用Looper.loop启动looper。
以下例子:函数
class NetWorkThread implements Runnable { public MyHandler mHandler =new MyHandler(); @Override public void run() { Looper.prepare(); //mHandler =new MyHandler(); Looper.loop(); } }
message,虽然咱们能够本身建立一个新的message,可是更加推荐的是调用handler的obtainMessage方法来获取一个message。这个方法的做用是从系统的消息池中取出一个message,这样就能够避免message建立和销毁带来的资源浪费了。oop
实例代码线程
NetWorkThread mNetWorkThread =new NetWorkThread(); new Thread(mNetWorkThread).start(); Message msg = mNetWorkThread.mHandler.obtainMessage(); msg.arg1=12; mNetWorkThread.mHandler.sendMessage(msg);
Message的使用样例设计
Message message = Message.obtain(); message.arg1 = 1; message.arg2 = 2; message.obj = "Demo"; message.what = 3; Bundle bundleData = new Bundle(); bundleData.putString("Name", "Lucy"); message.setData(bundleData);
Message能够经过new Message构造来建立一个新的Message,可是这种方式很很差,不建议使用。最好使用Message.obtain()来获取Message实例,它从消息池获取。code