涛涛的小马甲 Android之Handler机制
首先需要了解一个基本的概念ANR:Application not response 即应用程序无响应,也就是俗话说的死机。
出现Anr的原因是:
主线程需要做很多重要的事情,响应点击事件,更新UI
如果在主线程里面阻塞过久的时间,应用程序会无响应。
为了避免应用程序出现anr,所有的耗时操作都应该放在子线程里执行。像访问网络的操作只能在子线程里面执行
解决的方法:
主线程执行中---->包含一个Handler的对象,message queue 用来放置消息队列,Looper则不停 的查看message queue
里是否有待处理的消息,如果有就交给handler里的handleMessage方法处理请求。
子线程--->获取了一个资源要改变主线程的UI--->向主线程发送一个请求。
那么:在主线程里有一个类叫做Handler,消息处理器,用来处理子线程发送来的改变UI的请求。
总结:
1.在子线程里利用handler发送一条消息请求,该请求被放在主线程的message queue里。//message queue是一个队列先进先出。
2.在主线程里有一个looper的消息轮询器,就相当于一个巡逻人员,不停的查看message queue里是否有待处理的消息请求
3.如果looper发现了新的消息,就调用handlemessage的方法来处理消息。注意只有主线程才能修改view对象。
handler处理流程图如下:

//代码编写步骤:
1.主线程创建消息处理器
2.在子线程里把消息发送给主线程
3.当looper得到消息之后调用handlemessage的方法处理消息。
private Handler handler = new Handler();
public void handleMessage(Message msg){
if(msg.what ==123){
Bitmap bitmap = (Bitmap)msg.obj;
iv.setImageBitmap(bitmap);//iv为主界面中的ImageView。
}
}
//以下是子线程发送消息给主线程
Message msg = new Message ();
msg.what=123;
msg.obj =bitmap;
handler.sendMessage(msg);
//注意:Toast显示的内容也属于更新UI操作,故也需要进行handler处理。
涛涛的小马甲 Android之Handler机制的更多相关文章
- Android的Handler机制
Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...
- 10分钟了解Android的Handler机制
Handler机制是Android中相当经典的异步消息机制,在Android发展的历史长河中扮演着很重要的角色,无论是我们直接面对的应用层还是FrameWork层,使用的场景还是相当的多.分析源码一探 ...
- android之handler机制深入解析
一.android中需要另开线程处理耗时.网络的任务,但是有必须要在UI线程中修改组件.这样做是为了: ①只能在UI线程中修改组件,避免了多线程造成组件显示混乱 ②不使用加锁策略是为了提高性能,因为a ...
- 【转载】Android 的 Handler 机制实现原理分析
handler在安卓开发中是必须掌握的技术,但是很多人都是停留在使用阶段.使用起来很简单,就两个步骤,在主线程重写handler的handleMessage( )方法,在工作线程发送消息.但是,有没有 ...
- android之Handler机制
简单例子开头: 网络http请求网站源码数据并显示 注意点:访问网络需要加Internet权限: android.permission.INTERNET 简单的步骤: 使用UrlConnection请 ...
- [转]Android中handler机制的原理
Andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...
- Android Handler机制剖析
android的handler机制是android的线程通信的核心机制 Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃. Android中的实现了 接收消息的& ...
- Android多线程通信机制
掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么. 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序 ...
- android的消息处理机制——Looper,Handler,Message
在开始讨论android的消息处理机制前,先来谈谈一些基本相关的术语. 通信的同步(Synchronous):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将 ...
随机推荐
- Spark-Core RDD转换算子-Value型
1. map(func) 作用: 返回一个新的 RDD, 该 RDD 是由原 RDD 的每个元素经过函数转换后的值而组成. 就是对 RDD 中的数据做转换. 创建一个包含1-10的的 RDD,然后将每 ...
- Appium+Python之元素定位和操作
一.常用识别元素的工具 uiautomatorviewer:Android SDK自带的一个工具,在tools目录下 二.元素定位 1.格式:find_element_by_定位方式(va ...
- require 和 import 详解
前言 JS模块化编程是前端小伙伴们必不可少的知识,下面妹子将于自认为比较清晰的方式列举出来. 1 require 特点: 1.运行时加载 2.拷贝到本页面 3.全部引入 1.1 CommonJS No ...
- 关于html5 video
获取视频长度 <video id="video" width="200px" height="auto" src="vide ...
- Kafka DockerFile
FROM php:5.6.38-fpm COPY . /alidata/workerspace WORKDIR /alidata/workerspace RUN set -x && a ...
- JavaScript 模块化简析
关于模块化,最直接的表现就是我们写的 require 和 import 关键字,如果查阅相关资料,就一定会遇到 CommonJS .CMD AMD 这些名词,以及 RequireJS.SeaJS 等陌 ...
- There is no Action mapped for namespace [/] and action name [TestAction] ass
1.修改action的name值 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE strut ...
- oracle学习笔记(四) DML数据控制语言和TCL 事务控制语言
DML 数据管理语言 Data manage language insert, update, delete以及select语句,不过,有人也把select单独出来,作为DQL 数据查询语言 data ...
- ReactiveObjC(RAC)的使用汇总
RAC 指的就是 RactiveCocoa ,是 Github 的一个开源框架,能够帮我们提供大量方便的事件处理方案,让我们更简单粗暴地去处理事件,现在分为 ReactiveObjC 和 Reacti ...
- webstorm 2019 去掉编辑器右侧白线
第一步:打开设置 第二步: 第三部:apply 关闭设置