位置: 编程技术 - 正文

android之handler

编辑:rootadmin

推荐整理分享android之handler,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

android中handler的基本使用方法以及运行原理。

最近看mars的android重置版第二季的视频关于handler的讲解,让我对于这个以前知道怎么用,却不是很明白原理的组件的理解瞬间加深了无数倍。mars真的讲的很好,视频真的都蛮不错的。下面我写写自己学习到的知识,以及自己的了解。

handler的基本运行原理handler怎样从worker thread传输数据到main threadhandler怎样从main thread传输数据到worker threadhandler的post()方法handler的基本运行原理

为什么我们需要一个handler?我想这是一个最重要的问题,也就是说handler的作用到底是什么?handler主要是用于线程间的通信,那么问题又来了,为什么一个app中需要多个线程,而不是只有一个UI主线程就可以了呢?

假如app中只有一个UI主线程,那么,当需要进行网络连接,网络下载这些等待耗时较长的任务时,android系统就会检测到UI主线程长时间没有响应,就会发出一个 application not response的异常警告,简称ANR问题。所以,在UI主线程中,是要与用户实时交互的,不能出现长时间的等待问题。于是,这些任务必须在worker thread中进行。

然而根据android的设定,UI主线程之外的线程,(除了特别的控件,例如progressbar)不能修改UI里的控件的,这样又出现了新的问题,我们在子线程获得的数据,该如何反应的UI上与用户进行交互?这样,就出现了这个巧妙的组件,handler!

android之handler

那么,handler到底是如何运行的呢?handler对象首先取出一个消息对象,存入到一个消息队列messagequeue中,然后在另外一端,有一个looper对象,循环的从消息队列中取出消息对象再交给handler去处理。

handler怎样从worker thread传输数据到main thread

通过这个例子,我们可以看到,handlerMessage()方法是运行在主线程中的,而他可以得到来自worker thread的消息,这样,就可以将消息在UI界面更新了。

为什么只是初始化了一个handler对象,就会自动调用他的handleMessage方法?是因为在android.os.Handler类中有一个looper对象,会循环的从消息队列中取出消息,调用handleM而是撒个方法。

handler怎样从main thread传输数据到worker thread

通过运行结果可以知道,handleMessage()方法运行在worker thread中,这样就可以在worker thread中处理来自主线程的消息,实现了进程间的通信。

handler的post()方法

post方法通过生成一个message,然后把Runnable对象放在message中,再把message放在消息队列中,然后在主线程中取出这个Runnable对象,在主线程中执行。

最后的结果,是这个Runnable对象执行在main线程中。有了post()方法,我们可以直接在worker thread中先生成一个Runnable对象,然后在其中写上更新UI的代码,直接用post方法即可更新UI。

使用lint工具优化Android代码 一、概述Androidlint工具是一个静态的代码分析工具,用来检查代码中潜在的问题并且提高代码的正确性,安全性,可用性,国际化和性能。确保代码中没

点击界面产生气泡,气泡效果~ packagecom.ray.bubble;importandroid.app.Activity;importandroid.content.Context;importandroid.graphics.drawable.AnimationDrawable;importandroid.os.Bundle;importandroid.view.MotionEvent;importandroid.vi

Android中的回调机制 从学习Android到现在,有意无意都会听到一个叫做回调机制的这么一个东东。例如Activity的生命周期函数就是通过回调机制来实现的,还有为控件添加监

标签: android之handler

本文链接地址:https://www.jiuchutong.com/biancheng/379700.html 转载请保留说明!

上一篇:Android 重写Seekbar(android重写方法)

下一篇:使用lint工具优化Android代码(lint 工具)

  • 社保与个税有关系么
  • 超标准能按小规模纳税人标准纳税吗?
  • 零售和批发的界定
  • 自然人独资是小规模纳税人吗
  • 零星采购范围
  • 收到补助款怎么入账
  • 上市公司股价变动谁受益
  • 收到虚开的普票已经入账怎么调账
  • 管理费用已付款未收到发票
  • 小企业固定资产折旧方法
  • 自建厂房可以不办理房产证吗
  • 首次购买税控设备政策
  • 投资者减除费用可以填0吗
  • 不计提盈余公积可以分红吗
  • 赊销方式何时确认收入呢
  • 出租无形资产收到的租金
  • 分公司筹备方案
  • 公司向个人转账分录
  • 负数到正数的增减
  • 印花税的征税范围及税率
  • 个体工商户怎么交社保
  • 北大新闻传播学院副院长
  • 电脑在线测速的软件
  • 该内存不能为read是怎么回事
  • 专用发票增量申请流程
  • 下载的压缩文件打不开
  • 小规模年底税金怎么算
  • 小规模纳税人的企业所得税税率
  • u盘突然被写保护是坏了吗
  • 收取逾期包装物押金怎么算税
  • 金融企业贷款损失准备金计提比例
  • php中array_unshift()修改数组key注意事项分析
  • phpwechat
  • vue实现下载文件夹
  • thinkphp log
  • ssh命令用法
  • 产成品和库存商品两个一级科目怎么填
  • 进项税加计抵减是什么意思
  • 收到汇算清缴后怎么处理
  • 个人所得税纳税记录怎么查询
  • mysql内连接查询使用汉语作为官方语言的所有国家
  • 停工损失会计科目
  • 受托代销商品的手续费计入什么科目
  • 陈列费属于什么类目的
  • 外购商品用于宣传需要缴纳增值税吗
  • 服务业增值税加计10%如何申报
  • 债券投资属于什么
  • 无形资产的会计准则的相关规定
  • 交付使用资产是固定资产吗
  • 股息所得缴纳个税吗
  • 发票什么情况下可以作废
  • 以前年度损益调整
  • 公司向股东借款最新规定
  • 进口关税如何交
  • 研发费用辅助账模板 税务局
  • 应付票据贴现利息收入会计分录
  • Mysql 报Row size too large 65535 的原因及解决方法
  • fedora s9
  • 任务栏安全中心的图标没有了
  • solaris 11.3
  • win10系统无法开机怎么修复
  • on_wm_lbuttondown
  • windows media player在播放文件时遇到问题怎么解决
  • 手机如何使用windows
  • win10如何清除系统
  • msscli.exe - msscli是什么进程 有什么用
  • win7如何查询电脑使用记录
  • win8电脑远程控制怎么弄
  • 电脑arp攻击怎么解决
  • popupwindow底部弹出
  • jquery文本框内容改变事件
  • nodejs做接口
  • Tasharen Fog of War v1.0战争迷雾插件的使用(含Unity5.0Bug解决)
  • unity ngui
  • activity与fragment的通信
  • flask框架图
  • 自动寻路小说
  • js clearInterval()方法的定义和用法
  • 个人所得税完税证明网上打印
  • 城市维护建设税怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设