转于:http://blog.csdn.net/a7a9a68/article/details/7841762
-----------------------------------------------------------------------------------
- private Handler mHandler = new Handler(){
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case ID_USER:
- //获取传递的数据
- //Bundle data = msg.getData();
- //int count = data.getInt("COUNT");
- //处理UI更新等操作
- }
- };
- };
只要在run()方法中加入 Looper.prepare()就可以解决问题了,但是出现这种问题的原因是因为Android中不能在子线程中来刷新UI线程。建议是在你的子线程中添加hander来发送消息更新线程。
- private Handler mHandler = new Handler(){
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case ID_USER:
- //获取传递的数据
- //Bundle data = msg.getData();
- //int count = data.getInt("COUNT");
- //处理UI更新等操作
- }
- };
- };
主activity中创建线程
- MyThread thread = new MyThread();
- mThread = new Thread(thread);
- mThread.start();
MyThread
- class MyThread implements Runnable {
- public void run() {
- //执行数据操作,不涉及到UI
- Message msg = new Message();
- msg.what = ID_USER;
- //这三句可以传递数据
- // Bundle data = new Bundle();
- // data.putInt("COUNT", 100);//COUNT是标签,handleMessage中使用
- // msg.setData(data);
- mHandler.sendMessage(msg); // 向Handler发送消息,更新UI
- }
通过一个Handler来处理这些,可以在一个线程的run方法中调用handler对象的 postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮训处理这些。 Looper又是什么呢? ,其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,但是Looper和 Handler没有什么关系,我们从开源的代码可以看到Android还提供了一个Thread继承类HanderThread可以帮助我们处理,在 HandlerThread对象中可以通过getLooper方法获取一个Looper对象控制句柄,我们可以将其这个Looper对象映射到一个 Handler中去来实现一个线程同步机制,Looper对象的执行需要初始化Looper.prepare方法就能解决上面提到的问题。Message 在Android是什么呢? 对于Android中Handler可以传递一些内容,通过Bundle对象可以封装String、Integer以及Blob二进制对象,我们通过在线 程中使用Handler对象的 sendEmptyMessage或sendMessage方法来传递一个Bundle对象到Handler处理器。对于Handler类提供了重写方法 handleMessage(Message msg) 来判断,通过msg.what来区分每条信息。将Bundle解包来实现Handler类更新UI线程中的内容实现控件的刷新操作。相关的 Handler对象有关消息发送sendXXXX相关方法如下,同时还有postXXXX相关方法,一个为发送后直接返回,一个为处理后才返回
相关推荐
开一个新线程,引起的异常。1. ANR: application not responding 2.android.view.ViewRoot$...3.java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理. 简单定义: 1、Message Queue(消息队列): 用来存放通过Handler发布的消息,通常...
这次项目用到的主要是Handler Thread Looper,希望对这三者关系还不是很清楚的人能通过我的项目读懂,当然我也不敢保证一定能
Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread.currentThread().getId()); System.out.println("Activity-->"+ Thread....
Handler和looper详解.
Handler与AsyncTask共2页.pdf.zip
ASP.NET源码——利用handler生成静态页面的完整解决方案.zip
可以在子线程直接new一个Handler,不过需要在子线程里先调用Looper.prepare(),new一个Handler后,还需要调用Looper.loop()方法。 new Thread(new Runnable() { @Override public void run() { Looper.prepare()...
安卓Android源码——HandlerLooper2.rar
安卓Android源码——HandlerLooper1.rar
NULL 博文链接:https://null-point.iteye.com/blog/1443287
通过自定义Handler、Looper、Message.浅析Android线程间通信原理
赠送jar包:netty-handler-4.1.73.Final.jar; 赠送原API文档:netty-handler-4.1.73.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.73....
在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...
了Looper, Handler, Message这几个类的源码, 结果又一次被googler的设计震撼了, 特与大家分享。 android的消息处理有三个核心类: Looper,Handler和Message。 其实还有一个Message Queue(消息队列) , 但是MQ...
Android应用源码之HandlerLooper2.zip项目安卓应用源码下载Android应用源码之HandlerLooper2.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Android应用源码之HandlerLooper1.zip项目安卓应用源码下载Android应用源码之HandlerLooper1.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考