消息机制,Handler

package com.example.lenovo.textapp4;

import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;

public class Text6Activity extends AppCompatActivity {

    TextView tv_5,tv_6;
    //定义Handler
    Handler h=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            //处理消息
            if (msg.what==1)
            {
                String m=msg.obj.toString();
                tv_5.setText(tv_5.getText()+"  "+m);
            }
            else if (msg.what==2)
            {
                tv_5.setText(tv_5.getText()+"空消息");
            }

        }
    };

    int i=10;
    Handler hl=new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            switch (msg.what)
            {
                case 1:
                    i++;
                    if (i==20)
                    {
                        return;
                    }
                    tv_6.setText(i+"");
                    //发送
                    hl.sendEmptyMessageDelayed(1,1000);
                    hl.removeMessages(2);

                    break;
                case 2:
                    i--;
                    if (i==1)
                    {
                        return;
                    }
                    tv_6.setText(i+"");
                    hl.sendEmptyMessageDelayed(2,1000);
                    hl.removeMessages(1);
                    break;
                case 3:
                    hl.removeMessages(1);
                    hl.removeMessages(2);
                    break;
            }
        }
    };

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

        tv_5=(TextView)findViewById(R.id.tv_5);
        tv_6=(TextView)findViewById(R.id.tv_6);
    }

    //三个按钮
    public void bt2_on(View v)
    {
        switch( v.getId())
        {
            case R.id.bt_3:
                //发送增加消息

                hl.sendEmptyMessage(1);
                break;
            case R.id.bt_4:
                //发送减少消息
                hl.sendEmptyMessage(2);
                break;
            case R.id.bt_5:
                //发送暂停消息
                hl.sendEmptyMessage(3);
                break;
        }
    }
}

时间: 2025-01-13 15:08:05

消息机制,Handler的相关文章

Android消息机制Handler解析(源码+Demo)

Handler是开发人员在面试过程中最常见的问题之一了,这篇文章将较为全面地对Handler进行解读,包括源码层,以及使用方法. 如果看完文章有疑问,欢迎在评论中一起探讨 基本内容包括: 看完文章之后,可以用这个图片进行复习. 一.什么是Handler Handler是Android提供用来更新UI的一套机制,也是一套消息处理机制,可以用它来发送消息,也可以用它来接收消息. 二.为什么使用Handler Android在设计之时,就封装了一套消息的创建.传递.处理机制,若不遵循这样的处理机制,就

Android的消息机制Handler详解

Android的消息机制详解 Android的消息机制主要指 Handler 的运行机制,Handler的运行需要底层的MessageQueue 和 Looper 的支撑. MessageQueue:消息队列,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作,其内部存储结构采用单链表的数据结构来存储消息列表. Looper:可理解为消息循环. 由于MessageQueue只是一个消息存储单元,不能去处理消息,而Looper会以无限循环的形式去查找是否有新的消息,如果有的话就处理,否则

Android消息机制Handler的实现原理解析

Android的主线程为什么可以一直存在? 线程是一个动态执行的过程,从产生到死亡包括五个状态:新建.就绪.运行.死亡和堵塞.只要线程没有执行完毕或者没有被其它线程杀死,线程就不会进入死亡状态.Android中的主线程一直存在是因为主线程中一直在监听消息,从而使线程无法被执行完毕. 线程的五种状态: 新建new Thread 当创建Thread类的一个实例对象时,此线程进入新建状态未被启动. 就绪runnable 线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等

Android消息机制Handler、Looper、MessageQueue源码分析

1. Handler Looper MessageQueue的关系 2.源码分析 下图表示了Handler.Looper.MessageQueue.Message这四个类之间的关系. Handler必须与一个Looper关联,相关Looper决定了该Handler会向哪个MessageQueue发送Message 每一个Looper中都包含一个MessageQueue Handler中的mQueue引用的就是与之关联的Looper的MessageQueue 不管Handler在哪个线程发送Mes

Android中对消息机制(Handler)的再次解读

今天遇到一些关于在子线程中操作Handler的问题,感觉又要研究源代码了,但是关于Handler的话,我之前研究过,可以参考这篇文章:http://blog.csdn.net/jiangwei0910410003/article/details/17021809.但是这篇文章没有说的那么深入了,所以这次就更深入的解读一下. 摘要 Android中的应用程序都是通过消息驱动的,系统为每一个应用程序维护一个消息队列(MessageQueue),应用程序的主线程不断的从这个消息队列中获取消息(Loop

Android消息机制——Handler

1 /**android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个MessageQueue(消息队列), 2 * 但是MessageQueue被封装到Looper里面了. 3 * 4 * Looper 5 * 6 * Looper 循环着.被设计用来使一个普通线程变成Looper线程. 7 * Looper.prepare()将当前线程初始化为Looper线程 8 * ....实例化Handler,处理消息 9 * Looper.loop()开始循环处理消

Handler消息机制与Binder IPC机制完全解析

1.Handler消息机制 序列 文章 0 Android消息机制-Handler(framework篇) 1 Android消息机制-Handler(native篇) 2 Android消息机制-Handler(实战篇) 2.Binder IPC机制 序列 文章 0 Binder开篇 1 Binder Driver初探 2 Binder Driver再探 3 启动Service Manager 4 获取Service Manager 5 注册服务(addService) 6 获取服务(getS

Android消息机制之Handler

Android为什么要提供Handler Android建议我们不要在UI线程中执行耗时操作,因为这很容易导致ANR异常(在Android源码中我们可以看到,UI如果对用户的操作超过5秒无响应,就会报ANR异常).因此,一些耗时操作都会在子线程中完成.当我们在子线程中获取了数据,要将其显示到UI中,如果没有Handler,这将很难完成.因此,Android之所以提供Handler,就是为了解决子线程访问UI的问题.为什么Android不允许在子线程中访问UI呢?显然这样做不安全,多线程访问UI是

Android Handler AsyncTask 消息机制

一.Android消息机制一 Android 有一种叫消息队列的说法,这里我们可以这样理解:假如一个隧道就是一个消息队列,那么里面的每一部汽车就是一个一个消息,这里我们先忽略掉超车等种种因素,只那么先进隧道的车将会先出,这个机制跟我们android 的消息机制是一样的. 角色描述 1. Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) . 2. Handler: 你可以构造Handler 对象来与Looper

深入解析Android中Handler消息机制

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