在非主线程(其他新线程)中创建Handler之前要先创建Looper,否则会抛异常"Can't create handler inside thread that has not called Looper.prepare()"。
在非主线程中创建Handler的写法有两种:
一、使用Looper.prepare()创建该线程的Looper对象
class MyThread extends Thread {
public void run() {
Looper.prepare();//创建该线程的Looper对象
Handler threadHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
Log.d("handle",msg.toString());
}
};
}
}
二、使用主线程中的Looper对象
Handler threadHandler =new Handler(Looper.getMainLooper()){
public void handleMessage(android.os.Message msg) {
Log.d("handle",msg.toString());
}
};
注:Activity在调用Activity.finish()函数之前要先清理掉handle中的未处理的消息,这样Activity才会顺利地执行destory;否则若handler有一个delay消息没有处理,Activity调用finish()函数后不会马上执行destory。