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();
}
相关推荐
踏雪羽翼8 小时前
android TextView实现文字字符不同方向显示
android·自定义view·textview方向·文字方向·textview文字显示方向·文字旋转·textview文字旋转
lxysbly8 小时前
安卓玩MRP冒泡游戏:模拟器下载与使用方法
android·游戏
夏沫琅琊10 小时前
Android 各类日志全面解析(含特点、分析方法、实战案例)
android
程序员JerrySUN11 小时前
OP-TEE + YOLOv8:从“加密权重”到“内存中解密并推理”的完整实战记录
android·java·开发语言·redis·yolo·架构
TeleostNaCl12 小时前
Android | 启用 TextView 跑马灯效果的方法
android·经验分享·android runtime
TheNextByte113 小时前
Android USB文件传输无法使用?5种解决方法
android
quanyechacsdn14 小时前
Android Studio创建库文件用jitpack构建后使用implementation方式引用
android·ide·kotlin·android studio·implementation·android 库文件·使用jitpack
程序员陆业聪15 小时前
聊聊2026年Android开发会是什么样
android
编程大师哥15 小时前
Android分层
android
极客小云17 小时前
【深入理解 Android 中的 build.gradle 文件】
android·安卓·安全架构·安全性测试