`
yidongkaifa
  • 浏览: 4071675 次
文章分类
社区版块
存档分类
最新评论

怎样使用多线程处理机制中的Handler

阅读更多

怎样使用多线程处理机制中的Handler

接下来让我介绍Android的Handler的使用方法。Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列。每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联。

Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器。2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了

MainActivity.java


[java]
package com.example.thread;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv;

// 消息处理者
private Handler handler;

private static final int TURNTEXT = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);

System.out.println("主线程----" + Thread.currentThread().getName());
tv = new TextView(this);
tv.setText("你好");
setContentView(tv);

// 处理者
handler = new Handler() {

// handlerMessage方法处理handler发送的消息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// msg.what操作获取发送什么消息,根据消息的标识,进行不同处理方式
int what = msg.what;
if (what == TURNTEXT) {
tv.setText(System.currentTimeMillis() + "");
}
}
};

try {
//主线程 阻塞 6s 大于
Thread.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

//run方法执行完毕 线程就死掉
new Thread(new Runnable() {

@Override
public void run() {
while (true) {
try {

System.out.println("子线程----"
+ Thread.currentThread().getName());
Thread.sleep(1000);
// 发送消息 what标识
handler.sendEmptyMessage(TURNTEXT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}).start();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

package com.example.thread;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv;

// 消息处理者
private Handler handler;

private static final int TURNTEXT = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);

System.out.println("主线程----" + Thread.currentThread().getName());
tv = new TextView(this);
tv.setText("你好");
setContentView(tv);

// 处理者
handler = new Handler() {

// handlerMessage方法处理handler发送的消息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// msg.what操作获取发送什么消息,根据消息的标识,进行不同处理方式
int what = msg.what;
if (what == TURNTEXT) {
tv.setText(System.currentTimeMillis() + "");
}
}
};

try {
//主线程 阻塞 6s 大于
Thread.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

//run方法执行完毕 线程就死掉
new Thread(new Runnable() {

@Override
public void run() {
while (true) {
try {

System.out.println("子线程----"
+ Thread.currentThread().getName());
Thread.sleep(1000);
// 发送消息 what标识
handler.sendEmptyMessage(TURNTEXT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}).start();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}




分享到:
评论

相关推荐

    Android多线程及异步任务消息处理机制 一 Handler的使用

    Android多线程及异步任务消息处理机制 一 Handler的使用博文源代码 想要学习更多有关于Android的知识 请关注博客http: blog csdn net yegongheng

    Android多线程处理机制中的Handler使用介绍

    接下来让我介绍Android的Handler的使用方法。Handler可以发送Messsage和...当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了 MainActivity.java

    Android中的Handler与多线程应用实例

    基于这个机制,我们在处理多线程的时候可以新建一个thread,这个thread拥有UI线程中的一个handler。当thread处理完一些耗时的操作后通过传递过来的handler像ui线程发送数据,由UI线程去更新界面。 handler应用多线程...

    Android Handler多线程详解

     Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决Android应用中多线程的问题,在Android中不 允许Activity新启动的线程访问该Activity里的UI组件,这样会导致新启动的线程无法改变UI...

    Android多线程及异步处理问题详细探讨

    2)多线程实现方式implements Runnable 或 extends Thread 3)多线程核心机制是Handler 4)提供如下几种实现方式 —-1—–Handler ————————————说明1 创建一个Handler时一定要关联一个Looper实例,默认...

    Android HandlerDemo

    二是方便统一管理,通过Handler可以统一进行对UI的管理,因为Handler采用消息处理的机制。就是另一个线程发送一个编号给消息所在的线程,那么该线程的消息处理程序就会收到该消息并进行处理,而消息采用int类型,...

    Android handler message奇怪用法详解

    android的多线程消息处理机制核心成员handler,基本用法很简单,相关资料也很多。本例子给大家带来handler的奇葩用法,与大家一起分享。

    android学习笔记之handler消息处理机制1

    但为了执行一些耗时操作,往往会将它们放在子线程中,执行完毕要更新主线程中的UI,所以就有了handler消息处理机制。 handler就相当于一个中转站,子线程通过sendMessage()等方法,将消息发送给handler对象,handler...

    swt-async-handler-1.0

    SWT同样不允许主线程外的其他线程直接访问控件。 所以SWT为我们提供了async执行Runnable的方法。...将在下一个版本中加入MessageQueue机制,实现多任务后台处理相应。 具体使用请参考test包下的Handler使用事例。

    Android 中 EventBus 的使用之多线程事件处理

    在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效。 AsyncTask, Loader和Executor…… 拜托! Android中有很多种执行异步操作的方法(指平行于UI线程的)。AsyncTask...

    Android中Handler消息传递机制

    当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。 出于...

    Android handler 详解(面试必问)

    handler在Android中被称为“消息处理者”,在多线程中比较常用。 Handler为Android提供了一种异步消息处理机制,当向消息队列中发送消息 (sendMessage)后就立即返回,而从消息队列中读取消息时会阻塞,其中从消息...

    Handler 总结

    每个线程最多只有一个Lopper,也最多只能有一个MessageQuque,当一个线程中有多个Handler时通过msg.target保证MissageQueue中的每个msg交由发送message的handler进行处理,msg有三个属性,msg.when msg.what msg....

    Android消息处理机制

    学习Android,新手必备。 主要介绍Android是如何在多线程下通过Handler来传递信息。

    XHandler:XHandler, handler的正确使用姿势与消息传递机制

    XHandler XHandler,handler的正确使用姿势与消息传递机制多线程和任务运行是老话题。 Java本身具有java.util.concurrent包和Fork / Join框架来简化它。 已经编写了一些库来简化异步操作。 RxJava是当今最流行的用于...

    android开发教程之handle实现多线程和异步处理

    首先,在之前的基本控件,基本都是在Activity的onCreate(Bundle savedInstanceState)方法中调用和处理的,但是,在有些情况,比如在网络上下载软件等一些需要等待响应时间比较长的操作,如果同样放在Activity的该...

    jvm-suspend-working-thread-机制:jvm暂停工作线程的机制

    JVM挂起工作线程的机制与原理首选使用Clang编译GCC编译会报错目前未研究清楚内嵌的汇编代码依赖编译后的栈上临时变量跟RBP指针的相对位置不保证编译器优化后内嵌的编译代码能正常运行怎么运行的由于编译可能产生问题...

    Android 消息机制详解及实例代码

    程序就相当于一直执行死循环,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数(handlerMessage),执行完成一个消息后则继续循环,若消息队列为空,线程则会阻塞等待。因此不会退出。如...

    Android开发与应用——张荣,原书配套课件

    7.4 Android多线程通信机制 7.5 小结 练习 第8章 网络通信 8.1 通过HTTP访问网络 8.1.1 测试用Web服务器 8.1.2 WebView组件 8.1.3 HttpURLConnection 8.2 Socket编程 8.3 数据的解析 8.3.1 JSON...

Global site tag (gtag.js) - Google Analytics