handler通信机制

 1 package com.example.gp08_day26_handler3;
 2
 3 import android.os.Bundle;
 4 import android.os.Handler;
 5 import android.os.Looper;
 6 import android.os.Message;
 7 import android.app.Activity;
 8 import android.view.Menu;
 9 import android.view.View;
10
11 /**
12  * 主线程给子线程发消息
13  * @author qq
14  *
15  */
16 public class MainActivity extends Activity {
17
18     private Handler handler;//需要在子线程中实例化
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23     }
24
25     public void sendMessage(View v)
26     {
27         //点击按钮给子线程发消息
28         Message msg = Message.obtain();
29         msg.obj ="hello,你好!";
30         //把Message对象放入handler内部的MessageQueue对象,而handler内部的MessageQueue引用指向的是 Looper中的MessageQueue
31         handler.sendMessage(msg);
32     }
33     //创建子线程
34     class MyThread extends Thread
35     {
36         public void run()
37         {
38             //需要先有Looper对象
39             Looper.prepare();//会创建一个Looper对象,并把该对象放入到该线程的本地变量中,在Looper的构造方法中创建了MessageQueue对象
40             //在子线程中实例化handler,子线程中没有Looper对象
41
42             // mQueue = mLooper.mQueue; handler内部的MessageQueue引用指向的是 Looper中的MessageQueue对象
43             handler = new Handler();//如果直接实例化Handler,会异常 new RuntimeException,原因是子线程中没有Looper对象
44
45             //让Looper对象循环读取MessageQueue中的消息
46             //循环从队列中读取消息,当读到消息时,回去调用   msg.target.dispatchMessage(msg);
47             //在Message类中有一个target成员,当发送消息时,target成员被赋值为当前的 handler对象
48             Looper.loop();
49         }
50     }
51
52 }

mainActivity

时间: 2024-10-12 09:26:13

handler通信机制的相关文章

Android 进程通信机制之 AIDL

什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在形式是一种 .aidl 文件,开发者需要做的就是在该文件中定义进程间通信的接口,编译的时候 IDE 就会根据我们的 .aidl 接口文件生成可供项目使用的 .java 文件,这和我们说的"语法糖"有些类似. AIDL 的语法就是 java 的语法,就是导包上有点细微差别.java 中如果两

【单页应用之通信机制】view之间应该如何通信

前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧,各种坑等着你去跳 最初就没有一定理论上的支撑,极有可能是这么一种情况: ① 需求下来了,搞一个demo做交待 ② 发现基本满足很满意,于是直接在demo中做调整 上面的做法本身没有什么问题,问题发生在后期 ③ 在demo调整后应用到了实际业务中,发现很多地方有问题,于是见一个坑解决一个坑 ④ 到最

深入解析Android中Handler消息机制

Android提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange).Handler消息机制可以说是Android系统中最重要部分之一,所以,本篇博客我们就来深入解析Android中Handler消息机制. Handler的简单使用 为什么系统不允许子线程更新UI 因为的UI控件不是线程安全的. 如果在多线程中并发访问可能会导致UI控件处于不可预期的状态,那为什么不对UI控件的访

Android Handler消息机制深入浅出

作为Android开发人员,Handler这个类应该是再熟悉不过了,因为几乎任何App的开发,都会使用到Handler这个类,有些同学可能就要说了,我完全可以使用AsyncTask代替它,这个确实是可以的,但是其实AsyncTask也是通过Handler实现的,具体的大家可以去看看源码就行了,Handler的主要功能就是实现子线程和主线程的通信,例如在子线程中执行一些耗时操作,操作完成之后通知主线程跟新UI(因为Android是不允许在子线程中跟新UI的). 下面就使用一个简单的例子开始这篇文章

Chromium扩展(Extension)通信机制分析

Chromium的Extension由Page和Content Script组成.如果将Extension看作是一个App,那么Page和Content Script就是Extension的Module.既然是Module,就避免不了需要相互通信.也正是由于相互通信,使得它们形成一个完整的App.本文接下来就分析Extension的Page之间以及Page与Content Script之间的通信机制. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面

[转]Handler消息机制详解

能简单说得我们尽量不复杂: 为了避免ANR,我们会通常把 耗时操作放在子线程里面去执行,因为子线程不能更新UI,所以当子线程需要更新的UI的时候就需要借助到安卓的消息机制,也就是Handler机制了. 注意:在安卓的世界里面,当 子线程 在执行耗时操作的时候,不是说你的主线程就阻塞在那里等待子线程的完成--也不是调用 Thread.wait()或是Thread.sleep().安卓采取的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程.以这种方式设计你的应用程序,将能

Android消息传递之Handler消息机制(一)

前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不忘初心吧,这也是今天来学习总结Handler消息机制的一个原因. Handler机制产生背景 一个Android应用程序被创建的时候都会创建一个UI主线程,但是有时我们会有一些比较耗时的操作,为了防止阻塞UI主线程,我们会将耗时的操作放到子线程中进行处理,处理完之后操作UI,但是Android不允许

安卓开发_深入理解Handler消息传递机制

一.概述 因为子线程的run()方法无法修改UI线程(主线程)的UI界面,所以Android引入了Handler消息传递机制,实现在新创建的线程中操作UI界面 二.消息类(Message) 消息类是存放在MessageQueue中的,而一个MessageQueue中可以包含多个Message对象 每一个Message对象可以通过Message.obtain()或者Handler.obtainMessage()方法获得 一个Message具有的属性: 属性 类型 介绍 arg1 int 存放整型数

Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue

前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler异步通信传递机制(包括Looper.Message Queue) 目录 定义 Android提供的一套消息传递机制 作用 用于实现子线程对UI线程的更新,实现异步消息的处理: - 在新启动的线程中发送消息 - 在主线程中获取并处理信息 为什么要用Handler 在安卓开发中: - 为了保证Android的UI操作是线程安全的,Android规定了只允许UI线程修改Activity里的UI组件: - 但