|
13.结合具体代码,详解Handle的创建:
package com.android.tutor;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class HandlerDemo extends Activity {
//title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}
private class MyTask extends TimerTask{
@Override
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
public void updateTitle(){
setTitle("Welcome to Mr Wei's blog " + title);
title ++;
}
}
上面的代码,直接在主线程中定义Handler成员。在子线程中通过主线程的handler向主线程发送消息。其使用步骤如下:
1、在主线程中定义handler,并为这个handler实现handleMessage方法。
2、在子线程中调用主线程的handler,通过其sendMessage方法发送消息。
Notes:
1.HandlerDemo对应一个主线程;
因为:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程);
所以:
在HandlerDemo类中定义handler成员变量,就对应的是:在主线程中定义handler;
2.子线程就是MyTask,在MyTask的run成员函数中调用mHandler.sendMessage(message),
就对应的是:在子线程中调用主线程的handler,通过其sendMessage方法发送消息;
3. updateTitle()属于更新UI操作,只能在主线程中操作,而handler是在主线程中创建,所以符合:UI更新只能在主线程中操作的原则; |
|