Android两个子线程之间通信
Android中,相信主线程和子线程之间的通信大家都不陌生了吧。在一次面试经历中被问到了两个子线程之间是如何进行通信的。哎呦!这可蒙住我了。后来回家研究了下,分享给大家。
其实android中线程通信无非就是handler和looper的操作。
一般情况下的主线程和子线程之间的通信,都是通过主线程中的handler把子线程中的message发给主线程中的looper,或者,主线程中的handler通过post向looper中发送一个runnable。looper默认存在于main线程中。那么子线程中没有Looper,该怎么办呢?很简单,我们可以把looper绑定到子线程中,并且创建一个handler。在另一个线程中通过这个handler发送消息,就可以实现子线程之间的通信了。
public class Thread1 extends Thread{
private Handler handler1;
public Handler getHandler(){//注意哦,在run执行之前,返回的是null
return handler1;
}
@Override
public void run() {
Looper.prepare();
handler1 = new Handler(){
public void handleMessage(android.os.Message msg) {
//这里处理消息
Log.i("MThread", "收到消息了:"+Thread.currentThread().getName()+"----"+msg.obj);
};
};
Looper.loop();
}
}
public class Thread2 extends Thread{
@Override
public void run() {
for(int i=0; i<10; i++){
Message msg = Message.obtain();
msg.what = 1;
msg.obj = System.currentTimeMillis()+"";
handler1.sendMessage(msg);
Log.i("MThread", Thread.currentThread().getName()+"----发送了消息!"+msg.obj);
SystemClock.sleep(1000);
}
}
}
执行效果:

代码下载请见:
http://download.csdn.net/detail/kedaweiwei/8518701
Android两个子线程之间通信的更多相关文章
- (转载) Android两个子线程之间通信
Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报 分类: 个人杂谈 版权声明:本文为 ...
- Android线程---UI线程和非UI线程之间通信
近期自学到了线程这一块,用了一上午的时间终于搞出来了主.子线程间的相互通信.当主线程sendMessage后,子线程便会调用handleMessage来获取你所发送的Message.我的主线程 ...
- Java线程之间通信
用多线程的目的:更好的利用CPU的资源.因为所有的多线程代码都可以用单线程来实现. 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程. 并行:多个CPU实例或者多台机器同时执行一段处理逻辑, ...
- 线程之间通信 等待(wait)和通知(notify)
线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必用方式之一.当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同 ...
- 14.Android-使用sendMessage线程之间通信
1.Handler介绍 Handler 是一个消息分发对象.handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,通过它可以实现在不同线程之间传递消息 本章Handle ...
- python两个子线程通过queue通信
SocketServer端代码 #!/usr/bin/env python import threading import SocketServer import time import queue ...
- Android Service与Activity之间通信的几种方式
在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ ...
- java 线程之间通信以及notify与notifyAll区别。
jvm多个线程间的通信是通过 线程的锁.条件语句.以及wait().notify()/notifyAll组成. 下面来实现一个启用多个线程来循环的输出两个不同的语句. package com.app. ...
- Android两个页面之间的切换效果工具类
import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; ...
随机推荐
- Xilinx DCM 使用---- 输出频率问题
最近在使用Xilinx FPGA验证项目,使用DCM将50M晶振分频得到20M时钟.但是下载代码到板子上验证,发现板子完全不工作. 然后 测量时钟,发现根本就没有20M时钟.查找资料,以及跟以前项目对 ...
- :before和 :after
:before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example:before { conte ...
- iOS项目中安装和使用 Cocoapods
1.首先我们要打开我们的终端: 2.在终端输入 这条命令 gem sources -l 2.1如果是和我是一样的显示,则镜像已添加,无需更改,如果不一样,则需要进行更改 这里输出的如果是 https ...
- hadoop 2.7.2 和 spark1.6 多节点安装
一共三个节点,在安装完hadoop之后直接安装spark.下载的spark版本是不带hadoop的,注意节点配置 Hadoop multi-nodes Installation Environment ...
- JS实现div动态水平垂直居中
在做页面的过程中,在很多地方都会遇到元素需要水平垂直的居中这个问题,之前总是去网上搜别人的代码,今天仔细研究了一下,分享给大家,先写一个简单的例子: <div class="mui-c ...
- Could not parse mapping document from input stream hibernate配置异常
十二月 , :: 下午 org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context ...
- MongoDB可视化工具RoboMongo----Windows安装 1
https://robomongo.org/download 非常小白的安装 自动安装完成. 启动MongoDB Mongodb启动教程 启动RoMongo 创建新的Mongodb 自定义db名称 连 ...
- tomcat虚拟目录映射网络共享目录
<Host name="localhost" debug="0" appBase="webapps" unpackWARs=" ...
- nginx缓存引发的问题
请求为f.chinasoft.com/file f.chinasoft.com 域名指向slb(3.3.3.3) 业务方式: ios-->slb(3.3.3.3)-->ecs集群(每一台e ...
- JAVA反射实践
Java反射机制在我的理解当中就是下面几点: 1. 对一个给定的类名(以字符串形式提供)能动态构建一个对象实例 2. 对于任意一个类,都能够知道这个类的所有属性和方法 3. 对于任意一个对象, ...