Android线程之自定义带消息循环尺蠖的实例

  

<强> Android线程之自定义带消息循环尺蠖的实例

  

Android系统的UI线程是一种带消息循环(电影)机制的线程,同时Android也提供了封装有消息循环(电影)的HandlerThread类,这种线程,可以绑定处理程序()对象,并通过处理程序的sendMessage()函数向线程发送消息,通过handleMessage()函数,处理线程接收到的消息。这么说比较抽象,那么,本文就利用基础的Java类库,实现一个带消息循环(电影)的线程,以帮助初学者理解这样一个电影到底是怎么工作的。

  

<强> 1。首先,我们完成一个简单的线程框架。,

        公开课LooperThread {      私人动荡的布尔mIsLooperQuit=false;      私人线程mThread;      公共空间开始(){   如果(mThread !=null) {   返回;   }   mIsLooperQuit=false;   mThread=新线程(mLooperRunnable);   mThread.start ();   }      公共空间停止(){   如果(mThread==null) {   返回;   }   mIsLooperQuit=true;   mThread=零;   }      保护Runnable mLooperRunnable=new Runnable () {      @Override   公共空间run () {   而(! mIsLooperQuit) {      }   }   };   }      之前      

如上述代码所示,mLooperRunnable.run()循环执行线程任务,mIsLooperQuit则是线程退出循环的条件下。面,我们将添加消息的发送和处理代码。

  

<强> 2。添加线程循环的消息发送和处理代码

  

(1)定义消息结构体,创建消息队列

        公开课LooperThread {      私人QueuemMessageQueue=new LinkedList ();      公共静态类信息{   int什么;   }   }   之前      

(2)创建互斥锁和条件变量

        公开课LooperThread {      私人锁mLock=新的ReentrantLock ();   私人条件mCondition=mLock.newCondition ();   }   之前      

(3)创建发送消息的函数

     //发送消息,由外部其他模块调用,发送消息给线程   公共空间sendMessage(消息消息){   如果(mThread==null) {   返回;   }   mLock.lock ();   mMessageQueue.add(消息);//添加消息到消息队列   mCondition.signal ();//通知线程循环,有消息来了,请立即处理   mLock.unlock ();   }   之前      

(4)创建处理消息的函数

     //处理消息,由线程内部调用   公共空间handleMessage(消息消息){//这里可以通过一个回调函数来回调监听者   }   之前      

(5)在mLooperRunnable.run()循环中解析消息

        保护Runnable mLooperRunnable=new Runnable () {      @Override   公共空间run () {      而(! mIsLooperQuit) {      mLock.lock ();   消息消息=零;      尝试{   而(! mIsLooperQuit,,mMessageQueue.isEmpty ()) {   mCondition.await ();//没有消息到来则休眠   }   消息=mMessageQueue.poll ();   }   抓住(InterruptedException e) {   e.printStackTrace ();   }   最后{   mLock.unlock ();   }      handleMessage(消息);   }   };   }   之前      

(6)修改线程的停止()函数,唤醒休眠的消息循环
  

        公共空间停止(){      如果(mThread==null) {   返回;   }      mIsLooperQuit=true;      mLock.lock ();   mCondition.signal ();   mLock.unlock ();      mMessageQueue.clear ();   mThread=零;   }   之前      

到这里,一个基本的带有消息循环的线程类封装就完成了,相信大家应该从编写这段代码的过程中,理解了系统是如何实现消息循环的。

  

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android线程之自定义带消息循环尺蠖的实例