【子线程创建handler】

本文记录了在Android开发中,如何使用Kotlin在子线程创建HandlerThread,并避免出现'Looper.prepare() not called'异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子线程创建handler

子线程创建handler的方式,在这里做个记录

Thread(object : Runnable {
    override fun run() {
        Looper.prepare()
        //Looper.myLooper()这里也可以不写,Handler会自动获取当前线程的looper
        //也可以用Looper.getMainLooper()获取主线程的looper
        //Looper.getMainLooper()在整个程序进程中是单例的
        //进程在ActivityThread中调用Looper.prepareMainLooper()初始化Looper.getMainLooper()
        //通过设置AndroidManifest.xml中的process,可以让产生多个进程,让Looper.getMainLooper()不一样
        val handler = Handler(Looper.myLooper())
        handler.post {
            L.i("ss ${Looper.myLooper()?.toString()}")
        }
        Looper.loop()
    }
}).start()
在这里插入代码片
private val handlerThread = HandlerThread("Controller")
handlerThread.start()
threadHandler = object :Handler(handlerThread.looper){
            override fun handleMessage(msg: Message) {
                when (msg.what){
                    0 ->{
                        Toast.makeText(MyApplication.context,"111111",Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }

下面这种方面 handlerthread的run方法中会调用looper.prepare()方法 不会抛出not called Looper.prepare()异常

public Handler(@Nullable Callback callback, boolean async) {
        if (FIND_POTENTIAL_LEAKS) {
            final Class<? extends Handler> klass = getClass();
            if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
                    (klass.getModifiers() & Modifier.STATIC) == 0) {
                Log.w(TAG, "The following Handler class should be static or leaks might occur: " +
                    klass.getCanonicalName());
            }
        }

        mLooper = Looper.myLooper();
        if (mLooper == null) {
            throw new RuntimeException(
                "Can't create handler inside thread " + Thread.currentThread()
                        + " that has not called Looper.prepare()");
        }
        mQueue = mLooper.mQueue;
        mCallback = callback;
        mAsynchronous = async;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值