Activity与Thread之间的通讯

来源:互联网 发布:linux如何开启8080端口 编辑:程序博客网 时间:2024/05/29 21:35

在Android中要让Activity与Thread进行通讯 其实很简单。

重点就在于android .os.Handler、java.lang.Thread以及android.os.Message这三个类的整合应用我们在Thread中可以通过Message来通知Handler,Handler在这里扮演着联系Acitivity与Thread之间的角色。

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

view source
print?
1private static final int GUINOTIFIER = 0x1234;

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

view source
print?
1public Calendar mCalendar;
2public int mMinutes;
3public int mHour;
4public Handler mHandler;
5private Thread mClockThread;

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

view source
print?
01mHandler = newHandler() {
02public void handleMessage(Message msg) {
03    switch(msg.what) {
04    caseTestHandler.GUINOTIFIER://TestHandler是Activity的类名
05        //得到Handle的通知了 这个时候你可以做相应的操作,本例是使用TextView 来显示时间
06        mTextView .setText(mHour +" : " + mMinutes);
07        break;
08    }
09    super.handleMessage(msg);
10}
11};

接下来我们自定义一个Thread

view source
print?
01class LooperThread extends Thread {
02    publicvoid run() {
03    super.run();
04    try{
05        do{//每间隔一秒取一次系统 时间
06        longtime = System.currentTimeMillis();
07        finalCalendar mCalendar = Calendar.getInstance();
08        mCalendar.setTimeInMillis(time);
09        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}

最后我们启动线程

view source
print?
1mClockThread = newLooperThread();
2mClockThread.start();

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

原创粉丝点击