涛涛的小马甲 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):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将 ...
随机推荐
- 20171110面试笔记 服务器端程序员+C/C++开发
socket 模型: https://www.cnblogs.com/nsnow/archive/2011/05/03/2036017.html http://blog.csdn.net/normal ...
- qt 删除xml某个标签下所有子标签
代码如下: QDomNodeList listFlowChart= doc.elementsByTagName("device"); QDomElement flowChart = ...
- Flask 中请求钩子的理解和应用?
请求钩子是通过装饰器的形式实现的,支持以下四种:1,before_first_request 在处理第一个请求前运行2,before_request:在每次请求前运行3,after_request:如 ...
- C# DataTable与实体的相互转换
using System; using System.Collections.Generic; using System.Data; using System.Reflection; namespac ...
- 剑指offer学习--实现单例模式
只能生成一个实例的类是为了实现单例模式的类型. 加同步锁前后两次判断实例是否已存在 我们只是在实例还没有创建之前加锁操作,以保证只有一个线程创建出实例.而当实例已经创建之后,我们已经不需要再做加锁操作 ...
- jquery遍历table中每个td的值
废话不说直接上: <table style="border:1px solid #ccc"> <tr> <td&g ...
- 查询sql server占用内存的情况
se master go select * from sysperfinfo where counter_name like '%Total Server Memory (KB)%' go
- zabbix 4.2 安装教程
1.我这里使用的是ali的yum源 #wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7 ...
- Photoshop画笔工具的使用
现在我们按下[B]从工具栏选择画笔工具,如果选中了铅笔就[SHIFT B]切换到画笔.然后按下[D],它的作用是将颜色设置为默认的前景黑色.背景白色.也可以点击工具栏颜色区的默认按钮(下左图红色箭头处 ...
- 修改pom项目版本 jenkins 关联 shell命令
#获取pom文件内的项目版本 version=`awk '/<version>[^<]+<\/version>/{gsub(/<version>|<\/ ...