本文主要是介绍雾山的Android学习笔记---消息机制(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在Android中可以通过Handler,Looper,MessageQueue来实现线程之间的通信,这是Android中非常重要的功能。
下面举个简单的例子来实现(模拟从网络获取数据来改变TextView的值):
1,在主线程中实现Handler的handleMessage()方法
2,在Work Thread中通过Handler发送消息
开发步骤:
1,新建一个Android应用程序
2, 在布局文件中添加一个Button和一个TextView控件标签,并为其设置属性和值
3, 在Activity中,声明Button和TextView控件变量并根据id获得控件对象 ,设置该Button的监听器
4, 在Activity中,在主线程中创建一个Handler对象
5,在Activity中,创建一个Handler的继承类,并定义handlerMessage(Message msg)方法
6,在Acticity中,创建一个线程,来模拟从网络中获得数据
下面是代码:
package com.tangbc.s02e06_handler2;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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 {private Button button;private TextView textView;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button)findViewById(R.id.button);textView = (TextView)findViewById(R.id.textView);handler =new MyHandler(); //定义Handler的对象handler在主线程中button.setOnClickListener(new ButtonListener());}class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {String s =(String)msg.obj; //Looper从MessageQueue中取出msg,并赋值给stextView.setText(s);}}class NetworkThread extends Thread{@Overridepublic void run() {//模拟访问网络的延迟try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}String s = "从网络中获取的数据";//textView.setText(s); 这样做是错误的,因为在Android中只有main Thread 才能操作UIMessage msg = handler.obtainMessage();msg.obj = s;handler.sendMessage(msg);}}class ButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {Thread t = new NetworkThread();t.start();}}}
启动该程序时;
1,在主线程中声明了一个Handler对象handler
2,点击按钮后,启动NetworkerThread线程,该线程休眠2S后将字符串s发送到消息队列中
3,Looper将该对象从消息队列中取出后,赋给主线程中的handler(handle是在主线程中声明),并调用handlerMessage()方法修改TextView的值
通过这个例子可以看到,可以在work thread中发送消息,在从main thread中把消息取出执行,这是一种非常方便并有用的实现work thread和main thread之间通信的机制。
这篇关于雾山的Android学习笔记---消息机制(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!