位置: 编程技术 - 正文

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 工具)

  • 固定资产报废进项税额怎么处理
  • 经营性现金流量净额是什么意思
  • 金税开票系统怎么导出发票明细
  • 增值税申报表第25行怎么填
  • 库存现金期末余额
  • 房地产收入成本确认
  • 红字专用发票信息表用什么纸打印
  • 甲供材能否开具增值税专用发票
  • 为职工支付的补充养老保险计入哪
  • 在建工程在现金流量表中
  • 个体工商户怎么注销
  • 企业中由特定人员所承担的一项
  • 出售股票会计怎么做分录
  • 天然气的销售需要什么资质
  • 国际货运代理免税
  • 工商年检的社保基数怎么填
  • 工资扣除社保怎么算
  • 应付账款周转率越高越好吗
  • 白银及其制品出自哪里
  • 持有至到期投资是什么意思
  • 一般纳税人不能转为小规模纳税人吗
  • 怎么简单快速的辨别是铝是锡
  • 前任会计很多错账
  • 资产负债表里的存货怎么算
  • 收到保险公司车辆保险发票会计分录
  • 合并报表抵消分录未分配利润怎么算
  • 库拉索的死
  • amr文件怎么转换为mp3
  • PHP:pcntl_wstopsig()的用法_PCNTL函数
  • 空调拆卸安装怎么找师傅
  • 罚款是否需要开发票
  • 蓝山公馆的房子怎么样
  • 前端框架源码
  • 小规模建筑公司经营范围大全
  • 城建税5%的是什么情况
  • python极客项目编程 豆瓣
  • 企业会计日志
  • 人力资源公司的招聘专员怎么样
  • 织梦如何使用
  • 有赞微小店认证麻烦
  • 织梦模板改成帝国模板
  • 费用报销审批单和费用报销单区别
  • 总承包可以转包吗
  • 基本社会保险制度范围
  • 在职职工暖气费补助款
  • 更衣柜属于什么费用
  • 递延所得税如何理解
  • 销售回扣能计入销售费用吗?
  • 股权转让,受让方的会计分录
  • 免税苗木普通发票抵扣怎么在申报填写
  • 减值损失对公司有哪些影响
  • 未入账的记账凭证填错了怎么办
  • 盘亏的固定资产是资产吗
  • 出口退税的计算与流程
  • 购入房屋建筑物进项税额抵扣
  • 小规模纳税人开具的农产品普通发票
  • 小规模纳税人如何计算增值税
  • 记账凭证是什么填制的?A.由经办人
  • mysql获取表行数的方法
  • mysql数据库主从数据不一致
  • win7关机很慢是什么原因
  • Windows 2003 SP2 简体中文版下载地址
  • xp系统没有任何图标
  • linux系统磁盘管理的主要内容
  • win10 Build 10565中Edge浏览器新增对HTML5视频的播放控制及下载
  • linux系统中的链接文件主要分为两种
  • linux0.12内核代码多少行
  • 如何删除win7系统
  • win8开始界面如何设置成win7
  • Vsftpd+tcp_wrappers控制主机和用户访问
  • windows8各个版本区别
  • cocos内存管理
  • Android 让EditText失去焦点避免自动弹出输入法
  • js date用法
  • unity更新下载文件
  • 亦庄地税局税务局营业大厅
  • 安康国税局电话号码
  • 居民个人从境外公司获得分红
  • 个体工商户银行卡是对公还是对私
  • 怎样查询上一年的国税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设