zoukankan      html  css  js  c++  java
  • Activity与Thread之间的通讯

    在Android中要让Activity与Thread进行通讯 其实很简单。
    重点就在于android .os.Handler、java.lang.Thread以及android.os.Message这三个类的整合应用
    我们在Thread中可以通过Message来通知Handler,Handler在这里扮演着联系Acitivity与Thread之间的角色。


    首先在Acitivity中我们要定义 一个常量来作为判断标示

    private static final int GUINOTIFIER = 0x1234;
    然后定义一些例子 里面需要的属性

    public Calendar mCalendar;
    public int mMinutes;
    public int mHour;
    public Handler mHandler;
    private Thread mClockThread;

    接着我们通过Handler来接收Thread所传递的信息

    mHandler = new Handler() {
                public void handleMessage(Message msg) {
                    switch (msg.what) {
                        case TestHandler.GUINOTIFIER://TestHandler是Activity的类名
                            //得到Handle的通知了 这个时候你可以做相应的操作,本例是使用TextView 来显示时间
                            mTextView .setText(mHour + " : " + mMinutes);
                            break;
                    }
                    super.handleMessage(msg);
                }
            };
    接下来我们自定义一个Thread

    class LooperThread extends Thread {
            public void run() {
                super.run();
                try {
                    do {//每间隔一秒取一次系统 时间
                        long time = System.currentTimeMillis();
                        final Calendar mCalendar = Calendar.getInstance();
                        mCalendar.setTimeInMillis(time);
                        mHour = mCalendar.get(Calendar.HOUR);
                        mMinutes = mCalendar.get(Calendar.MINUTE);
                        Thread.sleep(1000);
                        //取得系统时间后发送消息给Handler
                        Message m = new Message();
                        m.what = Ex04_14.GUINOTIFIER;
                        Ex04_14.this.mHandler.sendMessage(m);
                    } while (!LooperThread.interrupted());//当系统发出终端命令时停止循环
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    最后我们启动线程

    mClockThread = new LooperThread();
    mClockThread.start();

    利用上面的例子我们可以扩展更多的应用,比如使用Thread进行上传下载 操作,完成后通知主Activity等等

  • 相关阅读:
    003_当表中字段不能为空,但却没有赋值时?
    019_SSM——mybatis的#{id}可以根据是对象参数调用setId()的原码?
    002_com.wkcto自动添加错误
    018_SSM——Spring框架的byName与ByType实现自动注入的原码是什么呢?
    as3 文档类引用
    as3 连接mysql
    as2 针对加载进来的swf操作
    as3 arguments.callee与... (rest)
    as3 string split方法一些注意
    as3 Function 中的call与apply方法
  • 原文地址:https://www.cnblogs.com/stulife/p/1799734.html
Copyright © 2011-2022 走看看