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();
}
相关推荐
Just_Paranoid13 小时前
【MQTT】基于 Android 设备接入物联网平台最佳实践
android·mqtt·eclipse·iot·paho·mqtt.fx
alexhilton16 小时前
深入理解withContext和launch的真正区别
android·kotlin·android jetpack
TDengine (老段)19 小时前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
q***428220 小时前
SpringCloudGateWay
android·前端·后端
卫生纸不够用20 小时前
Appium-锁屏-Android
android·appium
阿拉斯攀登20 小时前
安卓工控机 OTA 升级方案(SpringBoot+MQTT)
android·spring boot·物联网·iot
顾林海21 小时前
从0到1搭建Android网络框架:别再让你的请求在"路上迷路"了
android·面试·架构
花花鱼21 小时前
android room中实体类变化以后如何迁移
android
Jomurphys1 天前
设计模式 - 适配器模式 Adapter Pattern
android
雨白1 天前
电子书阅读器:解析 EPUB 底层原理与实战
android·html