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等等