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

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>
时间: 2024-11-05 18:57:27

Handler详解系列(九)——Handler常用方法示例的相关文章

Handler详解系列(一)——Handler异步消息机制详解(附图)

MainActivity如下: package cc.cn; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.app.Activity; /** * Demo描述: * Android异步消息机制分析(附图) * * ===================

Handler详解系列(五)——Handler的post()方法详解

MainActivity如下: package cc.testui1; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.app.Activity; /*

Handler详解系列(八)——Handler与Toast以及其它杂项

MainActivity如下: package cc.testui4; import android.os.Bundle; import android.os.Looper; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; imp

Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息

MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.widget.TextView; /** * Demo描述: * * 示例步骤如下: * 1 子线程给子线程本身发送消息 * 2 收到1的消

Handler详解系列(三)——在子线程中给主线程的消息队列发送消息

MainActivity如下: package cc.c; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.w

Handler详解系列(二)——主线程向自身消息队列发消息

MainActivity如下: package cc.c; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.w

Handler详解系列(七)——Activity.runOnUiThread()方法详解

MainActivity如下: package cc.testui3; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.app.Activity; /** * Demo描述: * 在子线程中更改UI的方式三

Handler详解系列(六)——View的post()方法详解

MainActivity如下: package cc.testui2; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.app.Activity; /** * Demo描述: * 在子线程中更改UI的方式二

详解Android中Handler的使用方法_Android

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