免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1146 | 回复: 2
打印 上一主题 下一主题

Activity与Thread之间的通讯(old) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-19 21:38 |只看该作者 |正序浏览
Activity与Thread之间的通讯(old)








在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所传递的信息
  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.         };

  12. 接下来我们自定义一个Thread
  13. class LooperThread extends Thread {
  14.         public void run() {
  15.             super.run();
  16.             try {
  17.                 do {//每间隔一秒取一次系统 时间
  18.                     long time = System.currentTimeMillis();
  19.                     final Calendar mCalendar = Calendar.getInstance();
  20.                     mCalendar.setTimeInMillis(time);
  21.                     mHour = mCalendar.get(Calendar.HOUR);
  22.                     mMinutes = mCalendar.get(Calendar.MINUTE);
  23.                     Thread.sleep(1000);
  24.                     //取得系统时间后发送消息给Handler
  25.                     Message m = new Message();
  26.                     m.what = Ex04_14.GUINOTIFIER;
  27.                     Ex04_14.this.mHandler.sendMessage(m);
  28.                 } while (!LooperThread.interrupted());//当系统发出终端命令时停止循环
  29.             } catch (InterruptedException e) {
  30.                 e.printStackTrace();
  31.             }
  32.         }
  33.     }
复制代码
最后我们启动线程
  1. mClockThread = new LooperThread();
  2. mClockThread.start();
  3. 复制代码
复制代码
利用上面的例子我们可以扩展更多的应用,比如使用Thread进行上传下载 操作,完成后通知主Activity等等

论坛徽章:
0
3 [报告]
发表于 2012-01-24 00:01 |只看该作者
谢谢分享。

论坛徽章:
0
2 [报告]
发表于 2012-01-19 22:04 |只看该作者
谢谢分享
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP