消息机制
来源:互联网 发布:减肥淘宝排行榜 编辑:程序博客网 时间:2024/06/06 01:00
消息机制
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" tools:context="${relativePackage}.${activityClass}" ><!--定义文本组件用于显示信息,定义按钮用于进行事件处理 --> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/but" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/text" android:text="消息传递" /></RelativeLayout>MainActivity.java文件内容。
package com.example.infocontact2;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {// 定义常量用于标示public static final int SETMAIN = 1;public static final int SETCHILD = 2;private TextView text;private Button but;// 定义两个Handler,用于主线程和子线程之间的通信private Handler mainHandler, childHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);text = (TextView) findViewById(R.id.text);but = (Button) findViewById(R.id.but);Thread t = new Thread(new ChildThread(), "child thread");// 启动线程t.start();but.setOnClickListener(new OnClickListenerImpl());mainHandler = new Handler() {@Override// 当有消息要传到主线程时,定义了主线程处理信息的方法public void handleMessage(Message msg) {switch (msg.what) {case SETMAIN:MainActivity.this.text.setText("主线程接收数据"+ msg.obj.toString());break;}}};}private class OnClickListenerImpl implements OnClickListener {@Override// 将信息发送到子线程public void onClick(View v) {// 创建信息,这种创建信息的方法比Message msg = new Message()的性能要高Message childMsg = MainActivity.this.childHandler.obtainMessage();/* * obj代表的是Object类型的对象 */childMsg.obj = MainActivity.this.mainHandler.getLooper().getThread().getName();// 子线程处理信息的标志childMsg.what = SETCHILD;// 立即发送信息同时调用childHandler的handleMessage()方法处理信息childHandler.sendMessage(childMsg);}}class ChildThread implements Runnable {@Overridepublic void run() {// 创建一个通道Looper.prepare();childHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {// 子线程接收主线程的发送来的消息case SETCHILD:System.out.println("主线程的消息来了");//创建与主线程之间交互的信息Message toMain = MainActivity.this.mainHandler.obtainMessage();toMain.obj = "\n\n子线程的信息来了"+ super.getLooper().getThread().getName();//主线程进行处理信息的标志toMain.what = SETMAIN;//立即发送信息同时调用childHandler的handleMessage()方法处理信息MainActivity.this.mainHandler.sendMessage(toMain);break;}}};// 创建消息队列,消息队列中放的是Message,他会不断地从中提取信息进行处理Looper.loop();}}@Overrideprotected void onDestroy() {super.onDestroy();//终止从消息队列中提取信息,如果不写这句话会一直提取信息,并且Looper.loop()之后的代码不会执行MainActivity.this.childHandler.getLooper().quit();}}注:Looper相当于通道,本身就是一个消息队列的集合里边放的都是Message,每个消息都可以通过Handler增加和取出。一个线程只能有一个Looper,主线程的Looper会在android应用启动时默认创建,其他子线程都必须通过Looper.prepare()自己创建,然后再通过Looper.loop()方法循环不断地从MessageQueue中提取Message进行处理。
0 0
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- 消息机制
- HNU13377:Book Club(DFS)
- HDU1503:Advanced Fruits 【LCS】
- 微信开发时,接收微信回调时,如果是传递流,请不要用参数接收
- C语言-Loop
- POJ 2352 Stars
- 消息机制
- hdu 1829 A Bug's Life(带权并查集)
- jQuery笔记
- CSU 1328 近似回文词
- Java中方法重载与重写的区别
- poj 2559 求连续的最大矩形面积(也可用于ccf最大连续矩形面积)
- Android中Toast详解
- iOS开发-Day21-OC ARC&类目
- C语言-Array