Android线程和java线程其实并没有太大的区别,唯一的不同点就是多了Handler和Message两个类。
简单来说Handler就是一个邮差,而Message则是消息信件。因为Android只有主线程一个能够修改参数,所以需要邮差Handler将消息Message传到主线程组件进行更改参数。
1.定义一个类继承邮差Handler类,将要改变的组件传过来。接收消息,同时重写处理消息的方法。
2.定义一个类实现线程接口,同时在线程中实例化信件Message的对象,将内容赋值给 信件.obj,然后通过handler将信件发送出去。
3.在主线程中实例化继承邮差类的对象,通过构造方法将handler传给实现线程接口类。启动线程。
以下是一个安卓简易计时器的代码
public class MainActivity extends Activity {
ShowTimeHandler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button1);
TextView textView1 = (TextView) findViewById(R.id.textView1);
handler = new ShowTimeHandler(textView1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
CountTime ct = new CountTime(handler);
Thread th = new Thread(ct);
th.start();
}
});
}
public class CountTime implements Runnable{
int time;
Handler handler;
public CountTime(Handler handler) {
super();
this.handler = handler;
}
public void run(){
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
time++;
//获取消息对象
Message msg = new Message();
//设置信息
msg.obj = time+"";
//发送信息
handler.sendMessage(msg);
}
}
}
public class ShowTimeHandler extends Handler{
TextView showView;
public ShowTimeHandler(TextView showView) {
super();
this.showView = showView;
}
//重写处理消息的方法
@Override
public void handleMessage(Message msg){
Log.i("run","收到一条消息");
String str = (String) msg.obj;
showView.setText(str);
}
}