zoukankan      html  css  js  c++  java
  • android message两种方式

      前几天需要实现一个以太网功能就看了以太网的源码部分,看见了源码部分在消息处理时,发现有一些不同的地方:

      

      平时我在处理消息时:

      

      1、首先创建Handler对象:

      

      private Handler handler = new Handler(){

      public void handleMessage(Message msg) {

      switch (msg.what) {

      case 0:

      

      break;

      

      

      default:

      break;

      }

      };

      };

      

      2、然后是消息处理:

      

      private void TestHandlerMessage(){

      Message msg = new Message();

      msg.what = 1;

      handler.sendMessage(msg);

      }

      

      但是我看别人源码部分是是这样处理的:

      

      

      1、首先创建Handler对象:

      

      private Handler handler = new Handler(){

      public void handleMessage(Message msg) {

      switch (msg.what) {

      case 0:

      

      break;

      

      

      default:

      break;

      }

      };

      };

      

      

      2、然后是消息处理:

      

      private void obtainMessageTest(){

      Message msg = handler.obtainMessage();

      msg.what = 1;

      handler.sendMessage(msg);

      }

      

      通过比较我们会发现,这两种获取Message的实例的方法不一样,于是我看了源码,果然不一样:

      

      查看obtainMessage()源码:

      

      图1:

      

      进入obtain方法:

      

      图2:

      

      再进入objtain方法:

      

      图3:

    进入Message方法:

    图4:

    总结:

    上面的图3中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象

    如果是这人的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。

  • 相关阅读:
    listView控件演示程序
    猪悟能淘宝商品下载专家v3版开发手记
    c# WebClient类
    分隔控件splitter演示程序
    C#中SESSIONID的获取
    工具栏toolBar演示程序
    Cookie总结
    C#获取网页源码并且自动判断网页字符集编码
    如何在Google Code上建立私有代码版本库
    iOS应用程序生命周期(前后台切换,应用的各种状态)详解
  • 原文地址:https://www.cnblogs.com/gyqrenkai/p/5826317.html
Copyright © 2011-2022 走看看