在非主线程中创建Handler之前要先创建Looper

时间:2023-01-09 20:03:29

    在非主线程(其他新线程)中创建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