首页 > 其他分享 >Android中Handler的使用

Android中Handler的使用

时间:2022-08-23 16:11:22浏览次数:68  
标签:步骤 Handler 线程 消息 使用 msg Android Message

为什么使用Handler?

handler用来实现Android线程的异步操作,Android只允许UI线程修改界面。

Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以发消息,也可以通过它处理消息。

原理:创建一个Handler用来处理消息,Handler用来发送message,message进入message queue,pooler从message queue中取出message,然后将交给Handler进行处理。

使用实例

/** 
  * 方式1:新建Handler子类(内部类)
  */

    // 步骤1:自定义Handler子类(继承Handler类) & 复写handleMessage()方法
    class mHandler extends Handler {

        // 通过复写handlerMessage() 从而确定更新UI的操作
        @Override
        public void handleMessage(Message msg) {
         ...// 需执行的UI操作
            
        }
    }

    // 步骤2:在主线程中创建Handler实例
        private Handler mhandler = new mHandler();

    // 步骤3:创建所需的消息对象
        Message msg = Message.obtain(); // 实例化消息对象
        msg.what = 1; // 消息标识
        msg.obj = "AA"; // 消息内容存放

    // 步骤4:在工作线程中 通过Handler发送消息到消息队列中
    // 可通过sendMessage() / post()
    // 多线程可采用AsyncTask、继承Thread类、实现Runnable
        mHandler.sendMessage(msg);

    // 步骤5:开启工作线程(同时启动了Handler)
    // 多线程可采用AsyncTask、继承Thread类、实现Runnable


/** 
  * 方式2:匿名内部类
  */
   // 步骤1:在主线程中 通过匿名内部类 创建Handler类对象
            private Handler mhandler = new  Handler(){
                // 通过复写handlerMessage()从而确定更新UI的操作
                @Override
                public void handleMessage(Message msg) {
                        ...// 需执行的UI操作
                    }
            };

  // 步骤2:创建消息对象
    Message msg = Message.obtain(); // 实例化消息对象
  msg.what = 1; // 消息标识
  msg.obj = "AA"; // 消息内容存放
  
  // 步骤3:在工作线程中 通过Handler发送消息到消息队列中
  // 多线程可采用AsyncTask、继承Thread类、实现Runnable
   mHandler.sendMessage(msg);

  // 步骤4:开启工作线程(同时启动了Handler)
  // 多线程可采用AsyncTask、继承Thread类、实现Runnable


本文转自 https://blog.csdn.net/weixin_45845865/article/details/121518030,如有侵权,请联系删除。

标签:步骤,Handler,线程,消息,使用,msg,Android,Message
From: https://www.cnblogs.com/godshadow/p/16616627.html

相关文章

  • vue自定义指令的使用
    1、背景:想通过自定义指令v-hasHelp控制页面右上角是否出现帮助按钮,点击按钮可以跳转外部链接。用自定义指令的目的是方便。2、先在自己的项目中注册使用hasHelpindex.j......
  • C#中锁的使用分类
    1互斥锁lock(基于Monitor实现)定义:privatestaticreadonlyobjectLock=newobject();使用:lock(Lock){//todo}作用:将会锁住代码块的内容,并阻止其他线程进入该代......
  • pod资源的健康检查-readiness探针的httpGet使用
    livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从service的endpoints中移除同一个容......
  • 12 编辑器的引用和使用
    1文本编辑器更多的编辑器也可以在网上自行查找使用,根据官方文档一步一步操作即可。这里我们使用:TinyMCETinyMCE中文文档中文手册:http://tinymce.ax-z.cn/quick-start.p......
  • 使用EasyExcel实现web的excel下载
    Excel下载算是比较基础常见的需求了,一般有两种实现,一种使用Poi,第二种就是本文的EasyExcel实现下载,与前者相对比,EasyExcel做了进一步的封装,更容易实现了,贴上EasyExcel的官......
  • 使用 reduce 统计字符串每个字母出现的次数
    //统计字符串每个字母出现的次数letstr='asdfssaaasasasasaa'letobj=str.split('').reduce(function(prev,item){//prev的初始值是......
  • Java精进-20分钟学会mybatis使用
    文字分享希望现在的你无论有明确具体的目标还是没有,都能重视自己的需求和目标,并且常常回顾,或许可以找一个你习惯的方式写出来,挂在哪里,电脑或日记本都好。当你疲惫或迷茫的......
  • Android最新微信支付总结
    签名和包名,签名的话:用release。关于上线:非硬性指标。1.申请appid提交应用,等待审核。只有审核通过后,才能有开发资格。支付认证费:300元/年。每年需要认证一次。2.下载sdk......
  • Navicat使用HTTP通道连接远程服务器的SQLite文件(包含服务端搭建http服务)
    Navicat使用HTTP通道连接远程服务器的SQLite文件(包含服务端搭建http服务)基本原理数据库端口没开放外网访问的时候,Navicat在外网无法访问数据库。可以通过在服务器上运行......
  • 记一次使用“msck repair table 表名”这个命令
    背景:数据导入到hive后,查询不到数据 原因:MSCKREPAIRTABLE命令主要是用来解决通过hdfs dfs-put或者hdfsapi写入hive分区表的数据在hive中无法被查询到的问题。我......