位置: 编程技术 - 正文

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

  • 个人生产经营所得税怎么计算
  • 职工食堂费用计入管理费用
  • 劳务公司交企业所得税吗
  • 印花税不计入应交税科目吗?
  • 房产公司售楼部装修费入什么会计科目
  • 上一会计年度什么意思
  • 冲减收入怎么做账
  • 城市维护建设税属于什么科目
  • 成品油经销企业税收风险点
  • 商业折扣应交税费
  • 经销商注册什么公司
  • 自建厂房销售
  • 调财务报表怎样调整
  • 营改增建筑业税率是多少
  • 不同项目之间进项税能否抵扣?
  • 外购的货物用于集体福利是销售吗
  • 采购合同含税未税合同模板
  • 资本公积转增资本的条件
  • 房产税计税税率怎么算
  • 哪些银行承兑汇票比较好
  • 进项发票认证抵扣时间有限制吗
  • 金蝶k3初始余额录入打不进字
  • 税前利润弥补亏损
  • 物流服务费税率是多少
  • 坏账准备年末余额怎么计算
  • 跨年的所得税怎么冲
  • 企业并购效益
  • win10电脑如何设置锁屏时间
  • php两个多维数组合在一起
  • php发送电子邮件
  • win7系统网络一直转圈,什么都打不开
  • php 字符串函数
  • 债券转让增值税例子
  • 入库前仓储费用应计入
  • 系统资源不足,无法
  • php composer自动加载
  • 担保公司未到期责任准备金会计及税务处理案例
  • 房开企业增值税扣除土地价款包括契税吗
  • springboot和vue结合
  • 计算机还热门吗
  • 节流和防抖js
  • RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublas‘
  • 房租的计算方式
  • golang 调用动态库
  • 城镇土地使用税优惠政策
  • 发票明细怎么导出数量
  • 销售收入和营业收入的关系
  • 什么是财务报表分析,方法有哪些
  • csv文件导入到pycharm时报错
  • dedecms上传视频
  • 按工资申报的工龄怎么算
  • 个税申报中本人扣除比例什么意思
  • linux系统中mysql数据库的导入和导出
  • 交易性金融资产公允价值变动怎么算
  • 民间非营利组织会计制度及操作实务
  • 其他业务收入的现金流放哪里?
  • 企业未按照规定报送年度报告怎么办
  • 企业如何运用内部招募
  • 开业赠送礼品会计属于什么费用
  • 担保贷款借款人死亡
  • 费用分割单是什么
  • 稳岗补贴会计分录怎么做,需要缴纳企业所得税不
  • 会计错账的更正方法及适用范围
  • sql字段转首字母大写
  • xp恢复回收站删除文件
  • ubuntu英文系统安装中文输入法
  • mac上怎么用ppt
  • linux修改ulimit立即生效
  • ie11forwindows10
  • mac使用ios
  • macbook快捷操作大全
  • centos 安装
  • win8旗舰版官方下载
  • 右键回收站一直转圈
  • javascript要怎么学
  • 简单阐述javascript的主要作用
  • 详解使用Visual Studio Code对Node.js进行断点调试
  • 信用社股金分红时间
  • 国税局内设机构
  • 为什么专利转让要交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设