当前位置: 首页 > news >正文

建设银行河南省分行招聘网站网站建设包含哪些费用

建设银行河南省分行招聘网站,网站建设包含哪些费用,仿织梦长沙网站公司,网站制作哪些公司好前几天#xff0c;和同事探讨了一下Android中的消息机制#xff0c;探究了消息的发送和接收过程以及与线程之间的关系。虽然我们经常使用这些基础的东西#xff0c;但对于其内部原理的了解#xff0c;能使我们更加容易、合理地架构系统#xff0c;并避免一些低级错误。 对… 前几天和同事探讨了一下Android中的消息机制探究了消息的发送和接收过程以及与线程之间的关系。虽然我们经常使用这些基础的东西但对于其内部原理的了解能使我们更加容易、合理地架构系统并避免一些低级错误。   对于这部分的内容将分成4小节来描述   1.职责与关系   2.消息循环   3.线程与更新   4.几点小结   --------------------------------------------------------------------------------------------------   1 接下来我们开始这部分的内容首先了解一下各自的职责及相互之间的关系。   职责   Message消息其中包含了消息ID消息处理对象以及处理的数据等由MessageQueue统一列队终由Handler处理。   Handler处理者负责Message的发送及处理。使用Handler时需要实现handleMessage(Message msg)方法来对特定的Message进行处理例如更新UI等。   MessageQueue消息队列用来存放Handler发送过来的消息并按照FIFO规则执行。当然存放Message并非实际意义的保存而是将Message以链表的方式串联起来的等待Looper的抽取。   Looper消息泵不断地从MessageQueue中抽取Message执行。因此一个MessageQueue需要一个Looper。   Thread线程负责调度整个消息循环即消息循环的执行场所。   关系       HandlerLooper和MessageQueue就是简单的三角关系。Looper和MessageQueue一一对应创建一个 Looper的同时会创建一个MessageQueue。而Handler与它们的关系只是简单的聚集关系即Handler里会引用当前线程里的特定Looper和MessageQueue。   这样说来多个Handler都可以共享同一Looper和MessageQueue了。当然这些Handler也就运行在同一个线程里。   2 接下来我们简单地看一下消息的循环过程   生成          Message msg mHandler.obtainMessage();          msg.what what;          msg.sendToTarget();       发送          MessageQueue queue mQueue;           if (queue ! null) {               msg.target this;               sent queue.enqueueMessage(msg, uptimeMillis);           }   在Handler.java 的sendMessageAtTime(Message msg, long uptimeMillis)方法中我们看到它找到它所引用的MessageQueue然后将Message的target设定成自己目的是为了在处理消息环节Message能找到正确的Handler再将这个Message纳入到消息队列中。   抽取           Looper me myLooper();           MessageQueue queue me.mQueue;           while (true) {               Message msg queue.next(); // might block               if (msg ! null) {                   if (msg.target null) {                       // No target is a magic identifier for the quit message.                       return;                   }                   msg.target.dispatchMessage(msg);                   msg.recycle();               }           }   在Looper.java 的loop()函数里我们看到这里有一个死循环不断地从MessageQueue中获取下一个next方法Message然后通过Message中携带的target信息交由正确的Handler处理dispatchMessage方法。       处理           if (msg.callback ! null) {               handleCallback(msg);           } else {               if (mCallback ! null) {                   if (mCallback.handleMessage(msg)) {                       return;                   }               }               handleMessage(msg);           }   在Handler.java的dispatchMessage(Message msg)方法里其中的一个分支就是调用handleMessage方法来处理这条Message而这也正是我们在职责处描述使用Handler时需要实现handleMessage(Message msg)的原因。   至于dispatchMessage方法中的另外一个分支我将会在后面的内容中说明。   至此我们看到一个Message经由Handler的发送MessageQueue的入队Looper的抽取又再一次地回到Handler的怀抱。而绕的这一圈也正好帮助我们将同步操作变成了异步操作。   3剩下的部分我们将讨论一下Handler所处的线程及更新UI的方式。   在主线程UI线程里如果创建Handler时不传入Looper对象那么将直接使用主线程UI线程的Looper对象系统已经帮我们创建了在其它线程里如果创建Handler时不传入Looper对象那么这个Handler将不能接收处理消息。在这种情况下通用的作法是                   class LooperThread extends Thread {                                  public Handler mHandler;                                  public void run() {                                                  Looper.prepare();                                                  mHandler new Handler() {                                                                  public void handleMessage(Message msg) {                                                                                 // process incoming messages here                                                                  }                                                  };                                                  Looper.loop();                                  }                   }   在创建Handler之前为该线程准备好一个LooperLooper.prepare然后让这个Looper跑起来Looper.loop抽取Message这样Handler才能正常工作。   因此Handler处理消息总是在创建Handler的线程里运行。而我们的消息处理中不乏更新UI的操作不正确的线程直接更新UI将引发异常。因此需要时刻关心Handler在哪个线程里创建的。   如何更新UI才能不出异常呢SDK告诉我们有以下4种方式可以从其它线程访问UI线程   ·      Activity.runOnUiThread(Runnable)   ·      View.post(Runnable)   ·      View.postDelayed(Runnable, long)   ·      Handler   其中重点说一下的是View.post(Runnable)方法。在post(Runnable action)方法里View获得当前线程即UI线程的Handler然后将action对象post到Handler里。在Handler里它将传递过来的action对象包装成一个MessageMessage的callback为action然后将其投入UI线程的消息循环中。在 Handler再次处理该Message时有一条分支未解释的那条就是为它所设直接调用runnable的run方法。而此时已经路由到UI线程里因此我们可以毫无顾虑的来更新UI。   4 几点小结   ·      Handler的处理过程运行在创建Handler的线程里   ·      一个Looper对应一个MessageQueue   ·      一个线程对应一个Looper   ·      一个Looper可以对应多个Handler   ·      不确定当前线程时更新UI时尽量调用post方法   转自http://www.open-open.com/lib/view/open1327558863765.html 转载于:https://www.cnblogs.com/Mr-Hannibal/archive/2012/02/04/2337845.html
http://www.pierceye.com/news/538905/

相关文章:

  • 用服务器如何做网站拌合站建站方案
  • 如何给公司做网站网站建设板块建议
  • 微信公众号链接网站怎么做网站开发与维护宣传册
  • 商务网站建设实训报告总结东莞营销网站建设公司
  • 成都网站建设 雷阿里云服务器 个人网站
  • 云南网站设计公司网站死链接检查
  • 彭阳县城乡与住房建设局网站建设网站论坛都需要哪些工具
  • html5制作网站寻花问柳一家专门做男人的网站
  • 广东省网站集约化建设方案网络营销热门岗位
  • 专门做食品的网站电商网站建设系统
  • 网站改版什么意思汕头网站推广哪家好
  • 东营wordpress网站建设网站底部放什么
  • 网站备案应该怎么做90自己做网站
  • wordpress网站基础知识天津泰达建设集团网站
  • 加强红色网站建设网页设计图片显示不出来
  • 玉林网站建设徐州铜山区
  • 福建网站建建设方案单一产品销售网站建设模板
  • 免费开源门户网站系统网站seo优化如何做
  • html网站分页怎么做wordpress cms plugin
  • 一个网站如何做seo优化卖书网站开发的背景
  • jsp网站开发源码实例广州网站优化排名推广
  • 网站建设中网站需求分析报告百度网盘电脑版下载
  • 爱做网站网址工商网站注册公司
  • 住房和城乡建设部网站下载魔改wordpress主题
  • dremrever怎么做网站阿里云php网站建设教程
  • 网站建设课程旅行社手机网站建设方案
  • 书店网站建设策划书总结关于外贸公司的网站模板
  • 张家港市规划建设网站房地产估价师
  • 创建网站有什么用南京做网站优化的企业
  • 网站seo设置是什么怎么知道网站被百度k了