Activity与Thread之间的通讯

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


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

  1. private static final int GUINOTIFIER = 0x1234;
复制代码

然后定义一些例子 里面需要的属性

  1. public Calendar mCalendar;
  2. public int mMinutes;
  3. public int mHour;
  4. public Handler mHandler;
  5. private Thread mClockThread;
复制代码

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

  1. mHandler = new Handler() {
  2.             public void handleMessage(Message msg) {
  3.                 switch (msg.what) {
  4.                     case TestHandler.GUINOTIFIER://TestHandler是Activity的类名
  5.                         //得到Handle的通知了 这个时候你可以做相应的操作,本例是使用TextView 来显示时间
  6.                         mTextView .setText(mHour + " : " + mMinutes);
  7.                         break;
  8.                 }
  9.                 super.handleMessage(msg);
  10.             }
  11.         };
复制代码

接下来我们自定义一个Thread

  1. class LooperThread extends Thread {
  2.         public void run() {
  3.             super.run();
  4.             try {
  5.                 do {//每间隔一秒取一次系统 时间
  6.                     long time = System.currentTimeMillis();
  7.                     final Calendar mCalendar = Calendar.getInstance();
  8.                     mCalendar.setTimeInMillis(time);
  9.                     mHour = mCalendar.get(Calendar.HOUR);
  10.                     mMinutes = mCalendar.get(Calendar.MINUTE);
  11.                     Thread.sleep(1000);
  12.                     //取得系统时间后发送消息给Handler
  13.                     Message m = new Message();
  14.                     m.what = Ex04_14.GUINOTIFIER;
  15.                     Ex04_14.this.mHandler.sendMessage(m);
  16.                 } while (!LooperThread.interrupted());//当系统发出终端命令时停止循环
  17.             } catch (InterruptedException e) {
  18.                 e.printStackTrace();
  19.             }
  20.         }
  21.     }
复制代码

最后我们启动线程

  1. mClockThread = new LooperThread();
  2. mClockThread.start();
复制代码

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值