黑马程序员_Android-Handler的概念和使用

来源:互联网 发布:淘宝发布产品不同型号 编辑:程序博客网 时间:2024/06/04 19:49

---------------------- android培训、java培训、期待与您交流! ----------------------

1:Handler的基本概念
Handler提供的是一种异步处理机制
异步处理机制发送消息与接收消息不是同步进行,由消息队列中转进行处理,消息队列中的消息先进先出
为了实现后台下载的功能,不影响Activity的使用,可以控制线程,Handler控制线程是使用消息队列的形式
Handler中还有一个Message对象的消息队列,Message类是由Android操作系统提供的,我们可以为Message的arg1或arg2参数设置值,优点是系统性能消耗较少
例:Message msg = Handler.obtainMessage();
   msg.arg1=i;
用Handler.sendMessage(msg);方法可以将msg加入到Message的消息队列


2:Handler的基本使用方法
使用Handler需要创建Handler对象,并创建新线程,在线程的run方法中使用Handler的postDelayed(Thread)方法或Handler的post(Thread)方法执行多次或一次线程,postDelayed(Thread)方法中有两个参数,一个是线程对象,一个是毫秒值,就是每隔多少执行一次线程(将线程插入消息队列)但是这并不是线程的首次执行,因为我们是在线程中执行的该方法,所以我们要在某个监听器中用Handler的post(Thread)方法执行线程,因为没有毫秒数,所以是立即执行,马上放入消息队列
如果想要结束的话,我们可以在一个监听器中执行Handler的removeCallbacks(Thread);方法


3:Handler与线程
Handler其实是与它所在的Activity处于同一线程
Handler中对线程的处理其实不是另外启动一个线程,而是在原有线程上调用run函数


4:Bundle的用法
是一个以String为键以其他类型为值的mapping,相当于把数据打成一个包,可以看成一个特殊的map(因为他把键的值固定为了String类型,值也固定了一些类型)它是用来作为存储工具的,把需要的数据以键值对形式存入


5:在新线程当中处理消息的方法
当程序处理一些数据或者下载一些数据的时候会非常慢而且不一定会成功,这个时候我们就要用新线程处理
(1)HandlerThread对象实现了使用Looper循环处理消息队列的功能,
这个类由Android应用程序框架提供
例:HandlerThread handlerThread = new HandlerThread();
handlerThread.start();
(2)用HandlerThread的getLooper();方法可以获得HandlerThread的Looper
在前面的HandlerThread使用start()方法后这里使用getLooper();方法才能获得Looper,否则获得的为空
(3)我们需要创建一个新线程让他继承Handler,并写一个构造函数,
里面的参数是一个Looper,在这个构造函数中用super调用Handler的构造函数,并传入Looper
(4)然后创建一个我创建线程的的对象,将HandlerThread的getLooper();方法获得的HandlerThread的Looper
例:MyHandler myHandler = new MyHandler(handlerThread .geLooper());
(5)我们可以用Message的sendToTarget()方法发送Message对象,哪个handler调用的它,它就将Massage对象发送给哪个handler,然后调用哪个Handler的HandlerMessage()方法
例:Message msg = myHadler.obtainMessage();
msgsendToTarget();

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

原创粉丝点击