`
onewayonelife
  • 浏览: 259746 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Android Looper

 
阅读更多

LooperActivity

package org.wp.activity;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class LooperActivity extends Activity {
	/** iHandler对象 **/
	private Handler iHandler;
	/** 发送消息 **/
	private Button myButton;

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

		myButton = (Button) this.findViewById(R.id.myButton);
		myButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				new Thread() {
					public void run() {
						iHandler.sendEmptyMessage(0);
					}
				}.start();
			}
		});
	}

	/**
	 * Looper 类应用于在线程中建立一个消息循环,
	 * 线程默认是没有消息循环的,
	 * 我们可以通过在线程中调用 prepare()创建消息循环,
	 * 然后通过loop() 进入消息循环
	 */
	private void addMessageHandler() {
		iHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				new Thread() {
					public void run() {
						// 默认情况下Android中新诞生的线程是没有开启消息循环的
						// (主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环)
						// Looper对象通过MessageQueue来存放消息和事件
						// 一个线程只能有一个Looper,对应一个MessageQueue
						// 需要先调用Looper.prepare()启用Looper
						Looper.prepare();

						// 如果没有 Looper.prepare(); 与 Looper.loop();
						// 会抛出异常
						// Can't create handler inside thread that has not
						// called Looper.prepare()
						Toast.makeText(LooperActivity.this, "接收到消息",
								Toast.LENGTH_SHORT).show();

						// 在这里执行这个消息循环如果没有这句
						// 就好比只创建了Looper的消息队列而
						// 没有执行这个队列
						// 那么上面Toast的内容是不会显示出来的
						// Looper.loop(); 让Looper开始工作,从消息队列里取消息,处理消息。
						Looper.loop();
					}
				}.start();
			}
		};
	}
}

 

looper.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent"
	android:orientation="vertical">
	<Button android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:text="点击发送消息"
		android:id="@+id/myButton" />
</LinearLayout>

 

 

 

分享到:
评论

相关推荐

    Android Looper使用介绍

    Android Looper 使用介绍 Android Looper 是 Android 操作系统中的一种机制,用于在单线程中创建消息循环,以便实现线程之间的通信和消息处理。Looper 对象通过 MessageQueue 来存放消息和事件,每个线程只能有一...

    android Looper

    在Android系统中,`Looper`是一个至关重要的组件,它与`Handler`和`MessageQueue`共同构成了Android的消息处理机制。这个机制使得UI线程能够处理来自其他线程的异步消息,保持用户界面的响应性。这篇博客文章可能...

    android Looper详解

    android looper handler 子线程 主线程详解

    android looper分析

    ### Android Looper 分析 #### 一、概述 在 Android 应用开发中,消息处理机制扮演着极其重要的角色。Looper 类与 Handler 和 Message Queue 共同构成了 Android 的消息处理框架,它们之间的协同工作保证了应用...

    android Looper demo

    在Android开发中,`Looper`、`Handler`和`MessageQueue`是三个关键组件,它们共同构成了Android消息处理系统,用于实现线程间的通信,尤其是让UI线程能够响应非UI线程的数据更新。让我们深入探讨一下这些概念及其在...

    Android开发中Looper.prepare()和Looper.loop()

     Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,使用Looper....

    android looper

    在Android系统中,`Looper`是一个至关重要的组件,它在消息传递和事件处理机制中扮演着核心角色。本文将深入探讨`Looper`的工作原理、如何使用以及它在Android应用程序中的应用。 `Looper`是Android消息循环的核心...

    Android中的Looper对象详细介绍

    在Android系统中,`Looper`类扮演着至关重要的角色,它是消息循环机制的核心。`Looper`使得线程能够处理来自`Handler`的消息,是Android异步通信和事件驱动模型的基础。下面将详细介绍`Looper`对象及其相关的主要...

    Android Handler Looper Message 使用示例

    自己写的关于Android的Looper的示例程序。在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message...

    Android 线程之自定义带消息循环Looper的实例

    `Looper`、`Handler`以及`Message`是Android异步通信的核心组件。本篇文章将深入探讨如何自定义带有消息循环`Looper`的线程。 首先,我们需要了解`Looper`的作用。`Looper`是Android系统中的一个类,它负责在一个...

    Android消息处理机制Looper和Handler详解

    Android应用的运行基于消息驱动模型,这一模型的核心在于Looper、Handler和MessageQueue的协同工作。下面我们将深入理解这三个组件的作用及其交互。 1. **Message(消息)**: - Message是应用程序中传递信息的...

    RxJavaAndroidInterop,interop库,用于将android的主线程和循环直接公开为rxjava 3调度程序。.zip

    它提供了方便的方法,允许开发者直接将Android的主线程和Looper线程作为RxJava的调度器来使用。 RxJava是一个非常流行的响应式编程库,它引入了一种声明式的方式来处理异步数据流。在Android开发中,通常需要在特定...

    Android线程模式(handler,thread,looper)

    本文将深入探讨Android中的三种主要线程模式:Handler、Thread以及Looper,并结合源码分析它们的工作原理。 首先,我们来理解一下Android应用的基本运行环境。Android系统默认在主线程(UI线程)中执行所有的用户...

    android 多线程 looper handler

    Android 多线程 Looper Handler Android 操作系统中,多线程是一种常见的编程技术,通过使用多线程,可以提高应用程序的响应速度和效率。在 Android 中,多线程可以分为两种:有消息循环的线程和没有消息循环的线程...

    Android 之 Looper、MessageQueue、Handler 与消息循环

    ### Android之Looper、MessageQueue、Handler与消息循环详解 #### 一、概述 在Android开发过程中,消息处理机制是至关重要的部分,它涉及到应用程序如何管理、传递和响应各种事件。本篇文章将深入探讨Android中...

    Android的消息处理机制--Looper,Handler

    首先,`Looper`是Android消息循环的核心。它的主要任务是不断地从`MessageQueue`中取出`Message`对象,并将其分发给相应的`Handler`进行处理。`Looper`的构造函数是私有的,目的是为了防止直接实例化,而是通过`...

    Android Handler Looper

    在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制,尤其是在主线程与工作线程之间同步数据和执行UI更新时。Handler、Looper和Message三者结合使用,构建了一个消息处理系统,使得非UI线程...

    关于Looper的使用

    在Android系统中,Looper是消息循环机制的核心组件,它与Handler和Message紧密配合,使得应用程序能够实现线程间的通信。本文将深入探讨Looper的工作原理、使用场景以及如何在实际开发中应用。 首先,理解Looper的...

Global site tag (gtag.js) - Google Analytics