博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步消息处理机制Handler
阅读量:6768 次
发布时间:2019-06-26

本文共 2674 字,大约阅读时间需要 8 分钟。

Android 中的异步消息处理主要由四个部分组成,Message、Handler、MessageQueue 和Looper。

1. Message

Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。(字段有what arg1 arg2 obj)

2. Handler

Handler 主要是用于发送和处理消息的。发送消息一般是使用Handler 的sendMessage()方法,而发出的消息经过一系列地辗转处理后,最终会传递到Handler的handleMessage()方法中。

3. MessageQueue

MessageQueue 是消息队列,它主要用于存放所有通过Handler 发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue

对象。

4. Looper

Looper 是每个线程中的MessageQueue 的管家,调用Looper 的loop()方法后,就会进入到一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler 的handleMessage()方法中。每个线程中也只会有一个Looper 对象。

 代码实现:

package com.example.androidthreadtest;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.app.ProgressDialog;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener{        private TextView text;    private Button changeText;    //定义了一个整型常量UPDATE_TEXT,表示更新TextView 这个动作    private final static int UPDATE_TEXT=1;    //Handler 重写父类的handleMessage 方法,在这里对具体的Message进行处理    private Handler handler=new Handler(){        public void handleMessage(Message msg){            switch(msg.what){            case UPDATE_TEXT:                text.setText("Nice to Meet your");                break;            default:                break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        changeText=(Button) findViewById(R.id.change_text);        text=(TextView) findViewById(R.id.text);        changeText.setOnClickListener(this);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        switch(v.getId()){        case R.id.change_text:            new Thread(new Runnable() {                                @Override                public void run() {                    // TODO Auto-generated method stub                    Message message=new Message();                    message.what=UPDATE_TEXT;                    //发送消息                    handler.sendMessage(message);                }            }).start();        }    }    }

 message.what

  • Message是一个类
  • msg是类Message的一个实例
  • what是实例msg的一个成员变量
  • msg.what = 0是给成员变量what赋值

转载于:https://www.cnblogs.com/lyajs/p/5347990.html

你可能感兴趣的文章
C语言基础学习2:字符数组
查看>>
《C#线程参考手册》读书笔记(二):.NET中的线程
查看>>
数据结构7_链二叉树
查看>>
使用Newtonsoft将DataTable转Json
查看>>
第八天
查看>>
Android Studio中多项目共享Library
查看>>
用java的io流,将一个文本框的内容反转
查看>>
修改testtools框架,将测试结果显示用例注释名字
查看>>
谁说程序员必须要加班
查看>>
2 Django REST Framework 开发 ---- APIView
查看>>
类别列表_显示树状结构
查看>>
(待写)五大常用算法:分治、动态规划、贪心、回溯和分支界定
查看>>
C++ - memset的效率和源码分析
查看>>
【UIKit】UITableView 1
查看>>
[HeadFirst-HTMLCSS学习笔记][第十三章表格]
查看>>
2017-2018-2上课课程
查看>>
linux文件删除原理
查看>>
python 模块
查看>>
(5)连续非周期信号的傅里叶变换(频谱) & 周期信号的傅里叶变换
查看>>
poj 1422 Air Raid (二分匹配)
查看>>