Handler的总结
Handler的总结
我们创建的Service。Activity,Broadcast均是一个主线程处理,即UI线程,
但是进行耗时操作时,比如I/O读写的大文件,数据库操作及网络下载需要很长的时间,为了不阻塞用户界面,出现ANR的响应提示窗口,我们可以考虑使用Thread线程来解决
1.对于线程中的刷新一个view为基类的界面,可以使用postInvalidate()方法在线程中处理,其中还提供了一些重写方法比如postInvalidate(int left,int
top,int right,int bottom)来刷新一个举行区域,及延迟操作,比如postInvalidateDelayed(long delayMiliseconds)或postInvalidateDelayed(long delayMiliseconds,int left,int top,int right,int bottom)方法,其中第一个参数为毫秒。
2.推荐用一个Handler来处理这些,可以在一个线程的run()方法中调用handler对象的一个postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮流处理这些,
3.Looper:其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,但是Looper和Handler没有什么关系,我们从开源代码可以看到Android还提供了一个Thread继承类HandlerThread可以帮助我们处理,在HandlerThread对象中可以通过getLooper来获取Looper对象控制句柄,我们可以将这个Looper对象映射到一个Handler中去实现一个线程的同步机制,Looper对象执行需要初始化looper.perpare方法,同时还要释放资源,使用Looper.release方法。
4.Massage:对于Android中Handler可以传递一些内容,通过Bundle对象可以封装String,Integer和Blob二进制对象,我们通过在线程中使用Handler对吸纳高的sendEmptyMessage或sendMessage方法来传递一个Bundle对象到handle处理器,对于Handler类提供了重写方法handlerMessage(Message msg)来判断,通过msg。what来区分每条信息。将Bundle解包来实现Handler类更新UI线程中的内容实现控件的刷新操作。相关的Handler对象有关消息发送sendXXX相关方法如下,同时还要postXXXX相关方法,一个为发送后直接返回,一个为处理后才返回。
5.在Android中还提供了一个Task及AsyncTask处理方式
6.线程:
new Thread(
new Runabler(){
public void run(){
view.invalidate();
}
}
).start();
7.Thread+handler:
Handler myHandler=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case TestHadler.GUIUPDATEIDENTUFIER:
view.invalidate();
}
}
super.handlerMessgae(msg);
};
class myThread implement Runable{
public void run(){
while(!Thread.currentThread().isInterrupted() ){
Message messgae=new Message();
message.what=TestHandler.GUIUPDATEIDENTUFIER;
TestHandler.this.myHandler.sentMessage(message);
try( Thread.sleep(100); ){
catch(){}
}
}
}
}
8.TimerTask+Handler:
public class TestTimer extends Activity(){
Timer timer=new Timer();
Handler handler=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 1: setTitle("123");
break;
}
super.handleMessage(msg);
}
};
TimerTask task=new TimerTask(){
public void run(){
Message msg=new Message();
msg.what=1;
handler.senMessage(msg);
}
};
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInsanceState);
setContenView(R.layout.main);
timer.schedule(task,10000);
}
}
9.Runable+Handler.postDelayed(runable,time) :在Android里定时更新UI,通常使用的时java.util.Timer ,java.util.TimerTask ,android.os.Handler 组合,实际上Handler自身已经提供了定时的功能。
privae Handler handler=new Handler();
priavte Runable myRunable=new Runable(){
public void run(){
if(run){
handler.postDelayed(this,1000);
count++;
}
tvCounter.setText("count:"+count):
}
};
然后再其他地方调用:
handler.post(myRunable);
handler.post(myRunable,time);
案例看:http://shaobin0604.javaeye.com/blog/515820
Handler的总结的更多相关文章
- android Handler介绍
Handler使用介绍: Handler根据接收的消息,处理UI更新.Thread线程发出消息,通知Handler更新UI. Handler mHandler = new Handler() { p ...
- Handler
1.1 继承AbstractController优点:能定制请求方式 package cn.happyl.controller; import javax.servlet.http.HttpServl ...
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...
- Android笔记——Handler Runnable与Thread的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...
- Android消息传递之Handler消息机制
前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...
- Handler系列之内存泄漏
本篇简单的讲一下平常使用Handler时造成内存泄漏的问题. 什么是内存泄漏?大白话讲就是分配出去的内存,回收不回来.严重会导致内存不足OOM.下面来看一下造成内存泄漏的代码: public clas ...
- Handler系列之创建子线程Handler
上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...
- Handler系列之原理分析
上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...
- Handler系列之使用
作为一个Android开发者,我们肯定熟悉并使用过Handler机制.最常用的使用场景是"在子线程更新ui",实际上我们知道上面的说话是错误的.因为Android中只有主线程才能更 ...
- 阶段一:用Handler和Message实现计时效果及其中一些疑问
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 本来是打算继续做天气预报的优化的,但因为某些原因,我要先把之前做的小应用优化一下.所以今天就插播一下用Handle ...
随机推荐
- 后缀数组 POJ 3693 Maximum repetition substring
题目链接 题意:给定一个字符串,求重复次数最多的连续重复子串. 分析:(论文上的分析)先穷举长度 L,然后求长度为 L 的子串最多能连续出现几次.首先连续出现 1 次是肯定可以的,所以这里只考虑至少 ...
- ssl原理,非对称加密握手,对称加密传输
SSL的基本思想是用非对称加密来建立链接(握手阶段),用对称加密来传输数据(传输阶段).这样既保证了密钥分发的安全,也保证了通信的效率. SSL握手,单方服务器认证(一般的浏览器上网) SSL握手,双 ...
- WordPress用户注册无法发送密码邮件怎么回事?
wordpress无法发送电子邮件.可能原因:您的主机禁用了 mail() 函数 等等几句话.在网上一搜,很快找到了解决方案:使用wp-mail-smtp插件. 一.插件下载安装.可以在wordpre ...
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest F. Friends
F. Friends time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- Hive内部表外部表转化分析(装)
link:http://anyoneking.com/archives/127hive表分为内部表和外部表.外部表在删除的时候并不会删除到hdfs中的文件,比较安全,所以对于重要的需要进行分析的日志建 ...
- Java集合框架学习总结
转自:http://www.cnblogs.com/oubo/archive/2012/01/07/2394639.html Oubo的博客 以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介 ...
- topcoder SRM 610 DIV2 TheMatrix
题目的意思是给一个01的字符串数组,让你去求解满足棋盘条件的最大棋盘 棋盘的条件是: 相邻元素的值不能相同 此题有点像求全1的最大子矩阵,当时求全1的最大子矩阵是用直方图求解的 本题可以利用直方图求解 ...
- 关于vim插件
本人比较喜欢amix它集成了很多插件. 1.mru.vim:用于打开最近使用过的文件 使用命令: :MRU 打开最近的文件列表 上下箭头可以移动关标 :o 在新窗口中打开文件 2.NERD T ...
- JS:操作样式表1:行内样式
//访问元素样式1, stye属性只对行内样式有用 var box = document.getElementById("box"); // alert(box.style.col ...
- JavaScript基础学习篇
1.alert消息弹出框 alert(字符串或变量); 消息对话框通常可以用于调试程序. 与document.write 相似. 2.确认:confirm消息对话框 confirm(弹出时要显示的文本 ...