首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Handler、Looper学习小结

2012-06-27 
Handler、Looper学习总结package com.zzl.handlerimport android.app.Activityimport android.os.Bundle

Handler、Looper学习总结

package com.zzl.handler;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {private static final String TAG = "MainThread";private Handler mMainHandler, mChildHandler;private TextView info;private Button msgBtn;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);info = (TextView) findViewById(R.id.tv);msgBtn = (Button) findViewById(R.id.btn);mMainHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// 接收子线程的消息info.setText((String) msg.obj);}};new ChildThread().start();msgBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 发送消息给子线程if (mChildHandler != null) {Message childMsg = mChildHandler.obtainMessage();childMsg.obj = mMainHandler.getLooper().getThread().getName()+ "says hello!";mChildHandler.sendMessage(childMsg);}}});}@Overrideprotected void onDestroy() {super.onDestroy();mChildHandler.getLooper().quit();}class ChildThread extends Thread {private static final String CHILD_TAG = "ChildThread";@Overridepublic void run() {this.setName("ChildThread");// 初始化消息循环队列,需要在Handler创建之前Looper.prepare();mChildHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {try {sleep(10000);Message toMain = mMainHandler.obtainMessage();toMain.obj = "This is "+ this.getLooper().getThread().getName()+ ".  Did you send me "" + (String) msg.obj+ ""?";mMainHandler.sendMessage(toMain);} catch (InterruptedException e) {e.printStackTrace();}}};// 启动子线程消息循环队列Looper.loop();}}}/* * 第一,初始化子线程消息循环队列 执行代码:Looper.prepare();; 注意:初始化消息循环队列,需要在Handler创建之前 *  * 第二,启动子线程消息循环队列 执行代码:Looper.loop(); *  * 第三,点击按钮,发送消息给子线程 注意:使用的是方法是:mChildHandler.sendMessage(childMsg); *  * 第四,子线程接受到主线程发送过来的消息 注意:接收得Handler的名字叫:mChildHandler *  * 第五,子线程发送消息给主线程 调用的代码:mMainHandler.sendMessage(toMain); * 注意:这里发送消息的Handler是:mMainHandler 第六,主线程接收到子线程发送过来的消息,用TextView来显示 * 注意:接收得Handler的名字叫:mMainHandler *  * 至此,程序运行结束! */

热点排行