Android中Handler常用方法

 package com.example.testhandler;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
//Handler常用方法:
//1 post()
//2 postDelayed()
//3 sendMessage()
//4 handleMessage()
public class MainActivity extends Activity {
Runnable updateRunnable;
private final int CANCEL_RUNNABLE=99;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//以下为Handler第一种:根据Message的what不同做出相应的处理
if (msg.what==1) {
System.out.println("收到消息");
}
//以上为Handler第一种:根据Message的what不同做出相应的处理

//以下为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
if (msg.what==CANCEL_RUNNABLE) {
System.out.println("当前消息msg.what="+msg.what);
//取消Runnable的执行
removeCallbacks(updateRunnable);
}
//以上为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
}
};

/////////////////////////////////////////////////////////////////////////////////////////////

//以下为:Handler第一种:发出一个Message
new Thread(){
@Override
public void run() {
Message message1=new Message();
message1.what=1;
message1.obj=new Object();
//handle发出一个Message对象
//为方便测试以将该句子注释
//handler.sendMessage(message1);
super.run();
}
};
//以上为:Handler第一种:发出一个Message

//以下为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
//发出的Runnable会在Handler所绑定线程中延迟一定时间执行
updateRunnable = new Runnable() {
public void run() {
for (int i = 5; i < 15; i++) {
System.out.println("Runnable中的i="+i);
}
}
};
//handle发出一个Runnable对象
//为方便测试以将以下两句注释
//不能使用handler.post(updateRunnable);
//应该使用handler.postDelayed(updateRunnable, 5000);
//然后立马发出一个消息,这样就可以在handleMessage中
//调用removeCallbacks()方法
handler.postDelayed(updateRunnable, 1000);
handler.sendEmptyMessage(CANCEL_RUNNABLE);
//以上为:Handler第二种:handler.postDelayed(Runnable, delayMillis)

//以下为:Handler第三种:handler.post(Runnable)
//发出的Runnable会在Handler所绑定线程中立马执行
//为方便测试以将以下一句代码注释
//handler.post(updateRunnable);
//以上为:Handler第三种:handler.post(Runnable)
}

 

}

时间: 2024-11-18 05:36:18

Android中Handler常用方法的相关文章

详解Android中Handler的内部实现原理_Android

本文主要是对Handler和消息循环的实现原理进行源码分析,如果不熟悉Handler可以参见博文<详解Android中Handler的使用方法>,里面对Android为何以引入Handler机制以及如何使用Handler做了讲解. 概括来说,Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制.我们在使用Handler的时候与Message打交道最多,Message是Hanlder机制向开发人员暴露出来的相关类,可以通过Message类完成大部分操作Handler的功

详解Android中Handler的使用方法_Android

在Android开发中,我们经常会遇到这样一种情况:在UI界面上进行某项操作后要执行一段很耗时的代码,比如我们在界面上点击了一个"下载"按钮,那么我们需要执行网络请求,这是一个耗时操作,因为不知道什么时候才能完成.为了保证不影响UI线程,所以我们会创建一个新的线程去执行我们的耗时的代码.当我们的耗时操作完成时,我们需要更新UI界面以告知用户操作完成了.所以我们可能会写出如下的代码: package ispring.com.testhandler; import android.app.

Android中Handler Runnable与Thread的区别详解

转自: http://www.codeceo.com/article/android-handler-runnable-thread.html Android中Handler可以异步控制Runnable,那么这样做于Android中的Thread有什么区别呢?本文将通过多个角度来讲解这个问题,读完此文,相信你会对Android中的Handler Runnable与Thread有一个非常全面的了解. 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Th

Android中Handler机制问题

问题描述 Android中Handler机制问题 android中我们常通过handler来进行线程间的通信,里面通过Looper来进行消息管理.线程间的通信都可以自己来实现,Handler的优势在哪线程间通信 解决方案 Android中的Handler机制(一)android handler机制Android Handler机制 解决方案二: 最大优势是,Handler运行在主线程中(UI线程中),可以让子线程通过handler更新UI操作 解决方案三: handler主要优势就是线程通讯呀,

Android中Handler消息传递机制_Android

Handler 是用来干什么的? 1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息.当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了.由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面. 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发

android中handler和bundle有什么区别和联系

问题描述 android中handler和bundle有什么区别和联系 android中handler和bundle有什么区别和联系 都是用来传递消息吗都是信息的载体吗 解决方案 http://www.cnblogs.com/nuistlr/archive/2012/08/31/2665107.html handler提供了回调,接收返回,bundle打包发出信息.

Android中Handler消息传递机制

Handler 是用来干什么的? 1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息.当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了.由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面. 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发

Android 中Handler引起的内存泄露_Android

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } } } 但是,其实上面的代码可能导致内存泄露,当你使用Androi

详解Android中Handler的实现原理_Android

在 Android 中,只有主线程才能操作 UI,但是主线程不能进行耗时操作,否则会阻塞线程,产生 ANR 异常,所以常常把耗时操作放到其它子线程进行.如果在子线程中需要更新 UI,一般是通过 Handler 发送消息,主线程接受消息并且进行相应的逻辑处理.除了直接使用 Handler,还可以通过 View 的 post 方法以及 Activity 的 runOnUiThread 方法来更新 UI,它们内部也是利用了 Handler .在上一篇文章 Android AsyncTask源码分析 中