雾山的Android学习笔记---消息机制(三)
2014-05-15 14:42
148 查看
从Main Thread 向Worker Thread发送消息总共分成三个步骤:
1,准备Looper对象
2,在Worker Thread当中生成Handler对象
3,在Main Thread当中发送消息
下面举个例子来说明:
开发步骤:
1,新建一个Android应用程序
2,在布局文件中添加一个Button控件标签,并为其设置属性和值
3,在Activity中,声明Button控件变量并根据id获得控件对象 ,设置该Button的监听器,
4,在Activity中,创建一个Thread的继承类WorkerThread,并重写run()方法
5,在Activity中,创建一个Handler的继承类MyHandler,并重写handleMessage()方法
代码如下:
当运行程序时:
1,会在Main
Thread中运行一个Work Thread 线程wt
2,wt调用Looper的loop()方法之后,Looper对象将不断的从消息队列中取出消息对象
3,当点击button后,会向消息队列中发送一个消息对象msg,此时会被Work
Thread中的Looper对象从消息队列取出,然后调用handlerMessage()方法处理该消息对象
这样就完成了从Main
Thread向Work Thread发送信息的过程。
1,准备Looper对象
2,在Worker Thread当中生成Handler对象
3,在Main Thread当中发送消息
下面举个例子来说明:
开发步骤:
1,新建一个Android应用程序
2,在布局文件中添加一个Button控件标签,并为其设置属性和值
3,在Activity中,声明Button控件变量并根据id获得控件对象 ,设置该Button的监听器,
4,在Activity中,创建一个Thread的继承类WorkerThread,并重写run()方法
5,在Activity中,创建一个Handler的继承类MyHandler,并重写handleMessage()方法
代码如下:
package com.example.s02e07_handler03; 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.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button button; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new ButtonListener()); WorkerThread wt = new WorkerThread(); wt.start(); } class ButtonListener implements OnClickListener{ @Override public void onClick(View v) { Message msg = handler.obtainMessage(); handler.sendMessage(msg); } } class WorkerThread extends Thread{ @Override public void run() { //准备Looper对象 Looper.prepare(); //在workThread当中生成一个Handler对象 handler = new MyHandler(); //也可以用匿名内部类的方法实现 // handler = new Handler(){ // @Override // public void handleMessage(Message msg){ // System.out.println("收到"); // } // }; //调用Looper的loop()方法之后,Looper对象将不断的从消息队列中取出消息对象,然后调用handlerMessage()方法处理该消息对象 //如果消息队列中没有对象,则该线程阻塞 Looper.loop(); } } class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { System.out.println("收到"); } } @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; } }
当运行程序时:
1,会在Main
Thread中运行一个Work Thread 线程wt
2,wt调用Looper的loop()方法之后,Looper对象将不断的从消息队列中取出消息对象
3,当点击button后,会向消息队列中发送一个消息对象msg,此时会被Work
Thread中的Looper对象从消息队列取出,然后调用handlerMessage()方法处理该消息对象
这样就完成了从Main
Thread向Work Thread发送信息的过程。
相关文章推荐
- 雾山的Android学习笔记---消息机制(三) .
- 雾山的Android学习笔记---消息机制(二) .
- 雾山的Android学习笔记---Intent
- 雾山的Android学习笔记---线程(Thread)
- 雾山的Android学习笔记---消息机制(一)
- 雾山的Android学习笔记---消息机制(一) .
- 雾山的Android学习笔记---Intent
- Android学习笔记:WebView常用技巧
- Android学习笔记:使用SurfaceView制作简单游戏(1)
- Android消息机制
- android学习笔记
- Android学习笔记之广播
- Android学习笔记-广播机制
- android学习笔记-Android 应用开发特色
- Android学习笔记-广播机制的一些简单实例
- Android学习笔记:关于Handler的详解(一)
- [转]runtime 消息机制
- Android学习笔记----常用adb指令
- Android学习笔记(2)-初识Activity
- 【入门篇】Android学习笔记——项目结构及相关基础知识