android学习14#--Handler消息传递机制实例应用

来源:互联网 发布:画漫画的软件 编辑:程序博客网 时间:2024/06/10 12:08

上一篇android学习13#–Handler消息传递机制讲了它的原理,本文写两个例子来巩固下。例子比较简单。

主线程创建Handler

功能:UI线程创建一个handler,通过定时器周期性发送消息给UI线程,UI线程收到消息调整文字字体大小。
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"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.uudou.study.handleronuithread.MainActivity">    <LinearLayout        android:orientation="vertical"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_alignParentTop="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="测试文字"            android:id="@+id/textView"            android:layout_gravity="center_horizontal" />    </LinearLayout></RelativeLayout>

activity源码:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final TextView tText = (TextView) findViewById(R.id.textView);        /*主线程创建handler*/        final Handler tHandle = new Handler() {            public float tSize=32;            @Override            public void handleMessage(Message msg) {                if (msg.what == 0x123) {                    super.handleMessage(msg);                    this.tSize++;                    if (this.tSize > 100) this.tSize = 32;                    tText.setText("测试文字[size:" + (int) this.tSize + "]");                    tText.setTextSize(this.tSize);                }            }        };        /*创建一个定时器,周期性执行指定任务*/        new Timer().schedule(new TimerTask() {            @Override            public void run() {                tHandle.sendEmptyMessage(0x123);            }        }, 0, 1000);    }}

效果图:
这里写图片描述

在新线程中创建handler

功能:创建一个线程类,在新线程中创建一个handler,UI线程往新线程发送消息,新线程收到消息打印收到一个消息。打印出来
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"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.uudou.study.handleronnewthread.MainActivity">    <LinearLayout        android:orientation="vertical"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_alignParentTop="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true">        <Button            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="发送消息"            android:id="@+id/button"            android:layout_gravity="center_horizontal"            android:onClick="onClickButton"            android:textSize="32dp" />    </LinearLayout></RelativeLayout>

activity源码:

//NewThread.java/** * Created by jindg on 16-7-11. */public class NewThread extends Thread {    protected Handler tHandler;    Handler gettHandler() {        return tHandler;    }    @Override    public void run() {        Looper.prepare();        this.tHandler = new Handler() {            float tSize = 32;            @Override            public void handleMessage(Message msg) {                super.handleMessage(msg);                if(msg.what == 0x123) {                    Log.d("NewThread", "NewThread接收Handler消息");                }            }        };        Looper.loop();    }}//MainActivity.javapublic class MainActivity extends AppCompatActivity {    Handler tHandler;    NewThread tThread;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tThread = new NewThread();        tThread.start();    }    public void onClickButton(View source) {        this.tHandler = tThread.gettHandler();        this.tHandler.sendEmptyMessage(0x123);        Log.d("NewThread", "UI线程发送Handler消息");    }}

效果图:
这里写图片描述

0 0