Handler是Android中消息队列的总句柄(不知道怎么说)。
Handler的主要作用是当线程(非UI线程的子线程)要更新主线程的UI的时候用来传递消息的。
因为非UI线程是不能直接操作主线程的。为什么要用子线程?因为当作一些耗时操作的时候如果直接在主线程里写代码,比如下载文件等等,当这个耗时操作超过6秒的时候就会使整个 App崩溃!所以必须得用子线程!!!当子线程的耗时操作完成后,用handler.sendEmptyMessage()方法或handler.mHandler.obtainMessage(int,Object) a).sendToTarget()通知主线程更新UI(这2个方法,前个是没有传任何结果值的空通知,后一个是能传结果的。);
比如:
package com.example.handlertest;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity {
public Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tvResult = (TextView) findViewById(R.id.tv_result);
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
tvResult.setText(msg.obj.toString());
break;
default:
break;
}
super.handleMessage(msg);
}
};
new Thread(new Runnable(){
int a = 1;
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
a += 1;
}
mHandler.obtainMessage(1, a).sendToTarget();
}}
).start();
}
}