关于Looper的使用
来源:互联网 发布:怎么安装软件 编辑:程序博客网 时间:2024/05/16 01:01
我们知道,在android的线程里,是从message loop取出信息来处理的,主线程和子线程、子线程和子线程之间的通讯也是Looper来实现的,接下来我就简单介绍下Looper的使用方法。
主线程(即UI线程)自身就有message loop,不需要创建,而其他线程就需要手动创建,使用prepare()创建loop,使用 loop()来启动loop,直到loop停止。
方法介绍:
getMainLooper()
返回应用主线程的looper
getThread()
返回当前线程
loop()
在线程里运行信息队列(message queue)
myLooper()
返回当前线程的looper
myQueue()
返回当前线程的messageQueue对象
prepare()
初始化当前线程的Looper
prepareMainLooper()
初始化应用主线程的Looper
quit()
退出Looper
1.主线程向子线程发信息:
首先创建一个子线程,在子线程中创建Looper并且运行,接收主线程向子线程发送的信息,并且处理。
ChildrenLooperThread childerLooperThread=new ChildrenLooperThread();
childerLooperThread.start();
childerLooperThread.start();
public class ChildrenLooperThread extends Thread{
@Override
public void run() {
Looper.prepare();//创建Looper
mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.e("TAG", "mHandler");
Log.e("TAG", msg.obj.toString());//接收主线程向子线程发送的信息,并且处理。
super.handleMessage(msg);
}
};
Looper.loop();//运行
super.run();
}
}
@Override
public void run() {
Looper.prepare();//创建Looper
mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.e("TAG", "mHandler");
Log.e("TAG", msg.obj.toString());//接收主线程向子线程发送的信息,并且处理。
super.handleMessage(msg);
}
};
Looper.loop();//运行
super.run();
}
}
在主线程中向子线程发送信息
Message msg=mHandler.obtainMessage();
msg.obj="主线程向子线程传递数据";
mHandler.sendMessage(msg);
msg.obj="主线程向子线程传递数据";
mHandler.sendMessage(msg);
2.子线程向主线程发送信息
首先创建子线程,通过主线程的handler发送信息,在主线程创建的handler的handlerMessage中处理主线程发送信息。
MainLooperThread mainLooperThread=new MainLooperThread();
mainLooperThread.start();
mainLooperThread.start();
public class MainLooperThread extends Thread{
@Override
public void run() {
Message msg=mainHandler.obtainMessage();
msg.obj="子线程向主线程传递数据";
mainHandler.sendMessage(msg);
super.run();
}
}
@Override
public void run() {
Message msg=mainHandler.obtainMessage();
msg.obj="子线程向主线程传递数据";
mainHandler.sendMessage(msg);
super.run();
}
}
mainHandler=new Handler(Looper.getMainLooper()){//通过主线程的Loope创建handler
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.e("TAG", "mainHandler");
Log.e("TAG", "handleMessage");
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
super.handleMessage(msg);
}
};
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.e("TAG", "mainHandler");
Log.e("TAG", "handleMessage");
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
super.handleMessage(msg);
}
};
这样就可以在任意的2个线程间进行通讯。
有积分链接:http://download.csdn.net/detail/jhg19900321/4561747
无积分链接:https://code.google.com/p/my-csdn-resource/
注:我觉得分享应该是免费的,之所以有有积分的链接,就是为了如果有朋友积分很多,那就选择有积分链接,给我些积分,让我可以下载别人的源码,如果朋友没有积分,那就可以选择无积分的链接,谢谢!
- 关于Looper的使用
- Looper及Looper的使用
- 关于Java的Semaphore以及Android的Looper使用
- Looper的使用
- 使用延迟处理闪光灯的亮灭,关于looper的使用
- 一个关于looper和handler的好玩例子(子线程中使用handler)
- 关于android Handler Message Looper的理解
- 关于Handler、 Looper 、MessageQueue的认识
- android的looper、handler的使用
- Handler、Looper、Message、MessageQueue的使用
- Android的Looper类使用详解
- 关于Toast与looper
- 关于looper,handle,messageQuerry
- 关于Handler和Looper
- Android关于looper的几个方法的个人理解
- 关于消息机制handler message looper的学习总结
- Android 里面的多线程操作备忘,关于Thread,Handler, Looper
- 关于Looper,Handler,Message, MessageQueue,ThreadLocal的一些分析
- Linux 内存管理之highmem简介
- 20个公司绝对不会告诉你的潜规则
- 基本数据库操作类
- 2009年下半年系统架构设计师试题分析
- el表达式字符串处理函数
- 关于Looper的使用
- 关于java文件上传的学习
- 【流式计算】Twitter Storm源代码分析之Topology的执行过程
- Linux下OpenImageIO的安装
- EA使用教程
- X509证书的申请以及使用
- window.opener用法(在子窗体中获得父窗体的方法)
- android开发学习 day(六)单选框,复选框
- 模式匹配。。。opencv