Handler详解系列(九)——Handler常用方法示例

简介: MainActivity如下:package cc.c;import android.os.Bundle;import android.os.
MainActivity如下:
package cc.c;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
/**
 * Demo描述: 
 * Handler常用方法
 * 1 sendMessage() 
 * 2 post() 
 * 3 postDelayed() 
 * 4 handleMessage()
 */
public class MainActivity extends Activity {
	private Runnable mRunnable;
	private Handler mHandler;
	private final int CANCEL_RUNNABLE = 99;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initTest();
	}

	private void initTest() {
		System.out.println("UI线程ID=" + Thread.currentThread().getId());
		mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				if (msg.what == 1) {
					System.out.println("收到mHandler.sendMessage()方法发来的消息");
				}

				if (msg.what == CANCEL_RUNNABLE) {
					System.out.println("取消Runnable的执行");
					if (mRunnable != null) {
						removeCallbacks(mRunnable);
					}
				}
			}
		};

		// 为方便测试将以下三个方法分别调用
		// testSendMessage();
		// testPost();
		testPostDelayed();
	}

	/**
	 * Handler调用sendMessage()发送消息
	 */
	private void testSendMessage() {
		new Thread() {
			@Override
			public void run() {
				super.run();
				Message message = new Message();
				message.what = 1;
				message.obj = new Object();
				mHandler.sendMessage(message);
			}
		}.start();
	}

	/**
	 * Handler调用post()发送Runnable(本质也是发送消息)
	 */
	private void testPost() {
		mRunnable = new Runnable() {
			public void run() {
				System.out.println("Runnable所属线程ID="+Thread.currentThread().getId());
				for (int i = 0; i < 5; i++) {
					System.out.println("Runnable中的i=" + i);
				}
			}
		};
		mHandler.post(mRunnable);
	}

	/**
	 * Handler调用postDelayed()发送延迟的Runnable(本质也是发送消息)
	 */
	private void testPostDelayed() {
		mRunnable = new Runnable() {
			public void run() {
				System.out.println("Runnable所属线程ID="+Thread.currentThread().getId());
				for (int i = 10; i < 16; i++) {
					System.out.println("Runnable中的i=" + i);
				}
			}
		};
		// 1 发送带有延迟的Runnable
		mHandler.postDelayed(mRunnable, 1000);
		// 2 也可按照业务需求取消该mRunnable
		// 即调用removeCallbacks(mRunnable);
		// 等同于调用mHandler.sendEmptyMessage(CANCEL_RUNNABLE);
		mHandler.removeCallbacks(mRunnable);
	}

}

main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>


相关文章
|
11天前
|
消息中间件 存储 安全
handler
handler
17 0
|
11天前
|
消息中间件 存储
Handler
Handler
23 1
|
11月前
|
程序员 C++
set_new_handler(0)是什么意思?有什么用?
set_new_handler(0)是什么意思?有什么用?
72 0
|
消息中间件 Android开发
Handler postDelayed的实现原理
老生常谈之Handler
113 0
|
消息中间件 Android开发
Handler源码解读——handler使用时的注意事项
工作中经常会遇到从子线程发送消息给主线程,让主线程更新UI的操作,常见的有handler.sendMessage(Message),和handler.post(runnable)和handler.postDelayed(runnable, milliseconds);一直在使用这些方法,却不知道他们的原理,今天就来解释一下他们的原理。
|
缓存 Java Shell
Handler 的 Message 实例怎么获得?为什么不是直接 new?
Handler 的 Message 实例怎么获得?为什么不是直接 new?
|
JSON 数据格式
09准备将Handler的返回值写入ServletResponse
在RequestMappingHandlerAdapter初始化完成后设置默认的HandlerMethodReturnValueHandler HandlerMethodReturnValueHandler体系介绍 HandlerMethodReturnValueHandler的执行流程
184 0
|
消息中间件 存储 Java
你真的了解Handler吗
今天发一个以前的文章,关于Handler的全面解析,大家看看吧~「周末愉快」!
169 0
你真的了解Handler吗
|
消息中间件 Android开发
【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )
【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )
128 0
|
消息中间件 Android开发 程序员
浅谈Handler
前言 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得; Handler消息传递机制 出于性能优化考虑,Android的UI操作并不是线程安全的,这意义着如果有多个线程并发操作UI组件,则可能导致线程安全问题。
1375 0