- 浏览: 31842 次
文章分类
最新评论
介绍
首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程。为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信。
下面我们看看如何在线程当中实例化Handler。在线程中实例化Handler我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper)。
为线程创建Looper的方法如下:在线程run()方法当中先调用Looper.prepare()初始化Looper,然后再run()方法最后调用Looper.loop(),这样我们就在该线程当中创建好Looper。(注意:Looper.loop()方法默认是死循环)
我们实现Looper有没有更加简单的方法呢?当然有,这就是我们的HandlerThread。我们来看下Android对HandlerThread的描述:
Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.
使用步骤
尽管HandlerThread的文档比较简单,但是它的使用并没有想象的那么easy。
创建一个HandlerThread,即创建了一个包含Looper的线程。
HandlerThread handlerThread = new HandlerThread("leochin.com");
handlerThread.start(); //创建HandlerThread后一定要记得start()
获取HandlerThread的Looper
Looper looper = handlerThread.getLooper();
创建Handler,通过Looper初始化
Handler handler = new Handler(looper);
通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。
如果想让HandlerThread退出,则需要调用handlerThread.quit();。
当然用普通线程的形式也可以实现HandlerThread, 即 Looper线程
在线程中调用 Looper.prepare() 和 Looper.loop() 方法
首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程。为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信。
下面我们看看如何在线程当中实例化Handler。在线程中实例化Handler我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper)。
为线程创建Looper的方法如下:在线程run()方法当中先调用Looper.prepare()初始化Looper,然后再run()方法最后调用Looper.loop(),这样我们就在该线程当中创建好Looper。(注意:Looper.loop()方法默认是死循环)
我们实现Looper有没有更加简单的方法呢?当然有,这就是我们的HandlerThread。我们来看下Android对HandlerThread的描述:
Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.
使用步骤
尽管HandlerThread的文档比较简单,但是它的使用并没有想象的那么easy。
创建一个HandlerThread,即创建了一个包含Looper的线程。
HandlerThread handlerThread = new HandlerThread("leochin.com");
handlerThread.start(); //创建HandlerThread后一定要记得start()
获取HandlerThread的Looper
Looper looper = handlerThread.getLooper();
创建Handler,通过Looper初始化
Handler handler = new Handler(looper);
通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。
如果想让HandlerThread退出,则需要调用handlerThread.quit();。
当然用普通线程的形式也可以实现HandlerThread, 即 Looper线程
在线程中调用 Looper.prepare() 和 Looper.loop() 方法
class LooperThread extends Thread { public Handler mHandler; public void run() { [b]Looper.prepare();[/b] mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; [b]Looper.loop();[/b] } }
发表评论
-
android页面布局 中间的listView填充剩余部分
2016-12-05 17:29 640<?xml version="1.0" ... -
Eclipse Memory Analyzer 分析内存溢出
2016-10-19 11:37 0一 安装篇 1. eclipse 自 ... -
MSBuild命令行编译Xamarin 项目
2016-04-19 14:42 1140Xamarin 平台: C# language – 使用C ... -
微信聊天左滑显示删除实现
2016-04-06 18:04 854参考http://blog.csdn.net/xiaanmin ... -
Android Handler 作用
2016-03-21 15:31 371Android handler 作用: 什 ... -
Android UI 线程和子线程通信
2016-03-18 18:24 0从主线程发送消息到子 ... -
数据库升级
2016-03-07 17:09 0转自: http://892848153.iteye.com/ ... -
Android ListView 问题汇总
2016-01-11 11:16 499Listview 问题汇总: 1. it ... -
Intent与Activity启动模式相关的Flag
2015-11-27 16:08 372网上对于 Intent 的 flag 做了很多介绍,都 ... -
android 让一个控件按钮居于底部的几种方法
2015-04-09 15:00 0android 让一个控件按钮居于底部的几种方法 1.采用li ... -
Service 理解
2015-03-11 19:08 01. Service 也是运行在主线程,和Activity级别 ... -
回调 同步 异步
2014-12-16 17:34 0回调 同步 异步 -
JSON
2014-12-16 17:33 0JSON 的使用场景 -
远程service
2014-12-16 17:32 0远程Service使用场景: 1. 远程Service-- ... -
Android 实现两个控件分别靠左侧边缘和右侧边缘,且不重叠
2014-12-11 16:02 40481. 使用relativeLayout 从右侧往左侧加,但是问 ... -
Android系统源码数据库(mmssms.db)(转)
2013-11-18 17:00 882论Android系统源码数据库(mmssms.db)中几个表之 ... -
Android SMS 数据库
2013-11-18 14:57 793$ adb shell $ cd data/data $ cd ... -
PC 操作Android手机
2013-11-15 18:10 558https://code.google.com/p/andro ... -
下载Android source 问题
2013-10-17 10:34 603fatal: '../platform/abi/cpp.git ... -
查看Android数据库
2013-03-19 15:26 5741. adb shell; 2. cd data/data 3 ...
相关推荐
android Handler Thread AsyncTask httpURLConnection学习的代码
这次项目用到的主要是Handler Thread Looper,希望对这三者关系还不是很清楚的人能通过我的项目读懂,当然我也不敢保证一定能
比较了handler加thread 和 AsyncTask 在处理消息的不同,详见博客 http://blog.csdn.net/renlei0109/article/details/39524463
Android中的Handler很重要,但是很简单,学好Handler很重要~
,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...
System.out.println("Handler-->"+Thread.currentThread().getName()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if ...
程序功能说明:点击“开始”按钮后,文本框中的数字每隔1秒钟自动加1,当增加到100时就停止。 (Handler消息传递机制)
测试Thread中使用Handler修改
handler结合Thread异步加载网络图片,诠释怎么在android实现多线程加载网络图片。。。
通过异步加载的方式实现网上照片的加载,使用Thread+Handler+Message技术实现,理解其他方式通过Handler和主线程通讯的原理。
Handler+thread 加载网络图片,是个学习android多线程好Demo
Demo android组件Service与Toast 第二个版本
简单的Demo,简单的网络获取图片,显示图片而已
HandlerThread的使用demo,具体介绍请点击http://blog.csdn.net/u011315960/article/details/70174217
WebView+Thread(内置Handler)实现应用内浏览器demo1
ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面
NULL 博文链接:https://wangwei121004-163-com.iteye.com/blog/1177709
NULL 博文链接:https://null-point.iteye.com/blog/1443287
171227-03.在Java中使用Android的Thread和Handler机制.java
handler.post()的demo喜欢的朋友可以看看