• 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对象就能避免创建对象,从而减少内存的开销了。

  • 相关阅读:
    XSS相关有效载荷及绕道的备忘录(下)| 文末有打包好的负载
    基于windows 10打造的kali工具集
    XSS挑战之旅---游戏通关攻略
    SQLi_Labs通关文档【1-65关】
    Linux 安装 lanmp
    linux 下的init 0,1,2,3,4,5,6知识介绍
    WebGL2系列之多采样渲染缓冲对象
    FireFox下Canvas使用图像合成绘制SVG的Bug
    WebGL 着色器偏导数dFdx和dFdy介绍
    JavaScript 一元正号运算符
  • 原文地址:https://www.cnblogs.com/gyqrenkai/p/5826317.html
Copyright © 2020-2023  润新知