第80章、Handle-Message-Looper消息机制之一(从零开始学Android)
2013-03-11 12:42
435 查看
本章着重了解一下Handle、Message、Looper用法。
一、设计界面
1、布局文件
打开res/layout/activity_main.xml文件。
输入以下代码:
二、程序文件
打开“src/com.genwoxue.handlemessageloop/MainActivity.java”文件。
然后输入以下代码:
三、配置文件
打开“AndroidManifest.xml”文件。
然后输入以下代码:
注意:采用默认AndroidManifest.xml即可,无需额外配置。
四、运行结果
一、设计界面
1、布局文件
打开res/layout/activity_main.xml文件。
输入以下代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/btnmain" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="自主线程发送消息给自己" /> <Button android:id="@+id/btnother" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="自其它线程发送消息至主线程" /> <TextView android:id="@+id/tvmsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /> </LinearLayout>
二、程序文件
打开“src/com.genwoxue.handlemessageloop/MainActivity.java”文件。
然后输入以下代码:
package com.genwoxue.handlemessageloop; 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 long s=0; private String TAG = "HandlerTest"; private ReceiveMessageThread receiveMessageThread =null; private EventHandler mHandler = null; private Button btnMain = null; private Button btnOther = null; private TextView tvMsg = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnMain = (Button)super.findViewById(R.id.btnmain); btnOther = (Button)super.findViewById(R.id.btnother); tvMsg = (TextView)super.findViewById(R.id.tvmsg); btnMain.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ //主线程发送消息给自己 Looper looper = Looper.myLooper();//get the Main looper related with the main thread //如果不给任何参数的话会用当前线程对应的Looper(这里就是Main Looper)为Handler里面的成员mLooper赋值 mHandler = new EventHandler(looper); // 清除整个MessageQueue里的消息 mHandler.removeMessages(0); String obj = "This main thread's message and received by itself!"; Message msg = mHandler.obtainMessage(1,1,1,obj); // 将Message对象送入到main thread的MessageQueue里面 mHandler.sendMessage(msg); } }); btnOther.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ //other线程发送消息给主线程 receiveMessageThread = new ReceiveMessageThread(); receiveMessageThread.start(); } }); } class EventHandler extends Handler{ public EventHandler(Looper looper){ super(looper); } public EventHandler(){ super(); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.e(TAG, "CurrentThread id:----------+>" + Thread.currentThread().getId()); switch(msg.what){ case 1: tvMsg.setText((String)msg.obj); break; default: Log.e(TAG,(String)msg.obj); break; } } } //ReceiveMessageThread has his own message queue by execute Looper.prepare(); class ReceiveMessageThread extends Thread { @Override public void run(){ Looper.prepare(); Looper looper = Looper.getMainLooper(); mHandler = new EventHandler(looper); mHandler.removeMessages(0); s=s+1; Message msg =new Message(); msg.what=1; msg.obj= String.valueOf(s); // 将Message对象送入到main thread的MessageQueue里面 mHandler.sendMessage(msg); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } Looper.loop(); } } }
三、配置文件
打开“AndroidManifest.xml”文件。
然后输入以下代码:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.genwoxue.handlemessageloop" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="15" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.genwoxue.handlemessageloop.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
注意:采用默认AndroidManifest.xml即可,无需额外配置。
四、运行结果
相关文章推荐
- 第80章、Handle-Message-Looper消息机制之一(从零开始学Android)
- 第81章、Handle-Message-Looper消息机制之二(从零开始学Android)
- 第81章、Handle-Message-Looper消息机制之二(从零开始学Android)
- android的消息处理机制handle解析——Looper,Handler,Message
- Android Handle,Looper,Message消息机制
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
- Android的消息处理机制——Looper,Handler,Message
- android消息处理机制(Looper,Handler,Message)
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制——Looper,Handler,Message
- Android消息处理机制:Handler Thread Message Looper []
- Android消息处理机制——Looper、Handler、Message 源码分析
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android的消息处理机制(图+源码分析)——Looper,Handler,Message