主线程

public class MainActivity extends ActionBarActivity {
private Handler handler;
// private Thread mthread;
private int timer;
private TextView info;
private Button msgbtn;
xThread xthread;
private boolean running; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
info=(TextView)findViewById(R.id.info);
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// super.handleMessage(msg);
switch (msg.what) {
case 0:
Log.i("xx", "==" + msg.obj);
info.setText("耗时" + msg.obj + "秒");
}
}
};
xthread=new xThread(handler);
msgbtn= (Button)findViewById(R.id.msgBtn);
msgbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(running){
running=false;
xthread.setRunning(false);
msgbtn.setText("开始");
}else{
running=true;
xthread.setRunning(true);
msgbtn.setText("停止");
} }
});
xthread.start();
} }

子线程

class xThread extends Thread{
private Handler mhandler;
private boolean running=true;
public xThread(Handler handler){
mhandler=handler;
}
private int t;
public void run(){
Message msg;
try {
while (true) {
if(running) {
msg = new Message();
Log.i("ggg", "==" + t);
Thread.sleep(1000);
t++;
msg.what = 0;
msg.obj = t;
mhandler.sendMessage(msg);
}
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
public void setRunning(boolean running){
this.running=running;
}
}

另:

public class MainActivity extends Activity {

    private static final String TAG = "MainThread";
private Handler mMainHandler, mChildHandler;
private TextView info;
private Button msgBtn; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); info = (TextView) findViewById(R.id.info);
msgBtn = (Button) findViewById(R.id.msgBtn); mMainHandler = new Handler() { @Override
public void handleMessage(Message msg) {
Log.i(TAG, "Got an incoming message from the child thread - "
+ (String) msg.obj);
// 接收子线程的消息
info.setText((String) msg.obj);
} }; new ChildThread().start(); msgBtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { if (mChildHandler != null) { //发送消息给子线程
Message childMsg = mChildHandler.obtainMessage();
childMsg.obj = mMainHandler.getLooper().getThread().getName() + " says Hello";
mChildHandler.sendMessage(childMsg); Log.i(TAG, "Send a message to the child thread - " + (String)childMsg.obj); }
}
}); } public void onDestroy() {
super.onDestroy();
Log.i(TAG, "Stop looping the child thread's message queue"); mChildHandler.getLooper().quit();
} class ChildThread extends Thread { private static final String CHILD_TAG = "ChildThread"; public void run() {
this.setName("ChildThread"); //初始化消息循环队列,需要在Handler创建之前
Looper.prepare(); mChildHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.i(CHILD_TAG, "Got an incoming message from the main thread - " + (String)msg.obj); try { //在子线程中可以做一些耗时的工作
sleep(100); Message toMain = mMainHandler.obtainMessage();
toMain.obj = "This is " + this.getLooper().getThread().getName() +
". Did you send me \"" + (String)msg.obj + "\"?"; mMainHandler.sendMessage(toMain); Log.i(CHILD_TAG, "Send a message to the main thread - " + (String) toMain.obj); } catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }; Log.i(CHILD_TAG, "Child handler is bound to - "+ mChildHandler.getLooper().getThread().getName()); //启动子线程消息循环队列
Looper.loop();
}
}
}

Android多线程通信之Handler的更多相关文章

  1. Android多线程通信机制

    掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么. 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序 ...

  2. android 多线程Thread,Runnable,Handler,AsyncTask

    先看两个链接: 1.http://www.2cto.com/kf/201404/290494.html 2. 链接1: android 的多线程实际上就是java的多线程.android的UI线程又称 ...

  3. Android多线程:深入分析 Handler机制源码(二)

    前言 在Android开发的多线程应用场景中,Handler机制十分常用 接下来,深入分析 Handler机制的源码,希望加深理解 目录 1. Handler 机制简介 定义一套 Android 消息 ...

  4. Android多线程机制和Handler的使用

    参考教程:iMooc关于Handler,http://www.imooc.com/learn/267 参考资料:Google提供Android文档Communicating with the UI T ...

  5. Android 多线程通信 访问网络

    package org.rongguang.testthread; import android.app.Activity; import android.os.Bundle; import andr ...

  6. Android多线程编程<二>Handler异步消息处理机制之Message

      Message(消息):       一. Message的字段:    在Android中,Message作为线程之间(主要是子线程和UI主线程之间)数据交换的载体,通过Handler去传递.它 ...

  7. Android多线程----异步消息处理机制之Handler详解

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. Android多线程分析之三:Handler,Looper的实现

    Android多线程分析之三:Handler,Looper的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多 ...

  9. Android多线程源码学习笔记一:handler、looper、message、messageQueue

    最近在学习Android多线程相关知识的源码,现在把自己的笔记整理一下,写出来加深印象. Android多线程通讯的核心是handler.looper.message.messageQueue,这篇文 ...

随机推荐

  1. Asset Store

    Asset Store 是用来供Unity开发者将自己的插件拿出来供大家有偿使用的一个平台. 报错信息: failed to import package with error cannot impo ...

  2. js的执行顺序

    js是顺序执行的,但是在一个<script></script>标签中,后面的函数会预加载.如: <script type="text/javascript&qu ...

  3. web前端学习网址

    最近一次电脑崩溃,重装系统所有在浏览器的网址,烟霄云散了…… 手册网址: http://www.shouce.ren/api/index demo学习网址: http://www.w3cplus.co ...

  4. CURL常用命令(转)

    下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名 ...

  5. Inside Flask - app.py - 2

    Inside Flask - app.py - 2 Flask 初始化参数 Flass 类是 Flask 框架的核心,一个 flask 对象处理视图函数注册.URL规则.模板配置.参数设置等等. 一般 ...

  6. div元素呈圆环排列

    <style> .path { width: 300px; height: 300px; padding: 20px; border-radius: 50%; background: rg ...

  7. uwsgi + nigix + django的样式展示

    编辑添加黄色部分  是你的项目目录  在你的项目目录写的静态文件 内的样式调用的是static 如果不是 请改名 [root@ayibang-server s10day11]# vim /etc/ng ...

  8. Android仿QQ窗口的抖动的动画效果

    就是仿照QQ窗口的抖动效果,在项目的res下创建anim文件夹,再创建两个xml文件:cycle.xml  . myanim.xml   cycle.xml  :   <?xml version ...

  9. Android --http请求之HttpURLConnection

    参考博客:Android HttpURLConnection 基础使用 参考博客:Android访问网络,使用HttpURLConnection还是HttpClient? String getUrl ...

  10. RouterOS软路由常用命令

    修改用户密码 [admin@MikroTik]>/user                               #进入操作路径 [admin@MikroTik]/user>prin ...