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();
}
相关推荐
90后的晨仔1 小时前
Android Studio 项目模板完全指南
android
summerkissyou19871 小时前
Android-SurfaceView-投屏-常见问题
android·surfaceview
明天就是Friday1 小时前
Android实战项目④ OkHttp WebSocket开发即时通讯App 完整源码详解
android·websocket·okhttp
吉哥机顶盒刷机2 小时前
好物分享:DNA-Android-4.0.5安卓固件解包、打包工具
android·好物分享
三棱球2 小时前
App逆向学习笔记(三)——Android开发入门课
android·笔记
安卓机器3 小时前
rom定制系列------魅族16x 解锁bl root与Flyme9安卓10线刷固件 传感器修复
android·魅族16x玩机
wellc5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
CYY956 小时前
Android 打印 SO 库的异常日志
android
找藉口是失败者的习惯7 小时前
深入理解 Android 无障碍服务
android