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();
}
相关推荐
小羊子说7 小时前
Android系统中 socketpair 的源码解读与应用分析小结
android·java
FL4m3Y4n8 小时前
MySQL索引原理与SQL优化
android·sql·mysql
我命由我123459 小时前
Android Gradle - Gradle 自定义插件(Build Script 自定义插件、buildSrc 自定义插件、独立项目自定义插件)
android·java·java-ee·kotlin·android studio·android-studio·android runtime
冬奇Lab9 小时前
AudioFlinger混音机制深度解析
android·音视频开发·源码阅读
滑雪的企鹅.11 小时前
Kotlin云头条技术点剖析(项目复习02)——用户协议页面
android·开发语言·kotlin
JMchen12311 小时前
Android NDK开发从入门到实战:解锁应用性能的终极武器
android·开发语言·c++·python·c#·android studio·ndk开发
脚大江山稳12 小时前
单独为mysql数据库的某个库创建用户
android·数据库·mysql
吉哥机顶盒刷机13 小时前
XDBL安卓玩机刷机工具V2.8_解压缩版
android·智能手机·电脑
XiaoLeisj15 小时前
Android 广播机制实战:从系统广播监听、自定义登录通知到有序广播分发
android