Android HandlerThread泄漏FD问题

平时我们在Android中使用Handler,一般都是需要将Handler绑定到某个Looper上。

而Looper一般是在LooperThread中的,我们一般这样获取Looper:

java 复制代码
{
    Looper looper1 = Looper.getMainLooper();   // 获取进程主线程上的Looper
    
    // 获取用户创建HandlerThread上的Looper
    HandlerThread handlerThread = new HandlerThread("workThd");
    Looper looper2 = new Looper(handlerThread.getLooper();
}

当使用第二种方式获取Looper时,因为Looper是在用户创建的LooperThread中,其中是包含了EventFd的,如果该LooperThread没有正确的结束并且释放资源,则会造成Fd泄漏。

在结束HandlerThread时,需要手动调用quitSafely来退出并且释放线程资源:

java 复制代码
{
    HandlerThread handlerThread = new HandlerThread("workThread");
    Looper looper1 = new Looper(handlerThread);
    ....
    ....
    looper1.quitSafely();
}
相关推荐
只可远观13 小时前
Android 自动埋点(页面打开 / 关闭 + 点击事件)完整方案
android·kotlin
私人珍藏库13 小时前
【Android】小小最新AI--千变万化扮演任何角色--沉浸式互动
android·app·工具·软件·多功能
zh_xuan14 小时前
Android MVI架构
android·mvi
测试开发-学习笔记14 小时前
Airtest+Poco快速上手
android·其他
李斯维14 小时前
Android Jetpack 简介:由来和演进
android·android studio·android jetpack
阿巴斯甜14 小时前
ARouter 的使用:
android
沐言人生15 小时前
ReactNative 源码分析9——Native View初始化
android·react native
程序员陆业聪16 小时前
当AI学会了混淆代码:LLM辅助混淆 vs R8,Android安全的下一个十字路口
android
yubin128557092316 小时前
mysql正则函数REGEXP
android·数据库·mysql
我命由我1234516 小时前
Android Framework P2 - 开机启动 Zygote 进程、Zygote 的预加载机制
android·java·开发语言·python·java-ee·intellij-idea·zygote