涛涛的小马甲 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):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将 ...
随机推荐
- SpringBoot(九) -- SpringBoot与数据访问
一.简介 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,xx ...
- 硬核!如何模拟 5w+ 的并发用户?
来自:http://t.cn/ES7KBkW 本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMe ...
- axios动态数据的获取
跨域:前端处理.后端处理 前端方法:代理 后端加header 第一步:全局安装axios cnpm install axios --save-dev 第二步: methods:{ ...
- 微信小程序之全局储存
全局变量app.globalData 本地缓存wx.setStorageSync(KEY,DATA)wx.getStorageSync(KEY)wx.getStorageInfoSyncwx.remo ...
- C# WinForm定时触发事件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Codeforces Round #421 (Div. 2) - A
题目链接:http://codeforces.com/contest/820/problem/A 题意:一个人在看一本书,书一共C页,这个人每天看v0页,但是他又开始加速看这本书,每天都比前一天多看a ...
- [NOI2007]社交网络(最短路)
[NOI2007]社交网络 Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题. 在一个社交圈子里有n个人,人与人之 ...
- 二、冯式结构与哈佛结构及ARM处理器状态和处理器模式
2.1 冯式结构与哈佛结构 2.1.1 两者的区别 如果是独立的存储架构和信号通道那就是哈佛结构,否则就是冯式结构 结构与是否统一编址没有关系,也与 CPU 没有关系,与计算机的整体设计有关 CACH ...
- Facebook超过1亿用户数据泄露,疑与中国黑客组织有关?
Facebook又向用户投放了另一个重磅炸弹,承认其超过1亿用户中的所有用户都应该认定恶意的第三方垃圾信息以及强大的黑客组织泄露了他们的公开个人资料信息. 周三,Facebook首席执行官马克扎克伯格 ...
- error: call of overloaded ‘sqrt(double&)’ is ambiguous
OpenFOAM定义了新的sqrt,当引入新的Library时,必须显式地使用std::sqrt(),否则会报如下错误: error: call of overloaded 'sqrt(double& ...