Android 服务示例代码泄漏文件描述符

标签 android memory-leaks file-descriptor

我目前在 Nexus 4 上运行 Android 4.4.4,并且在 4.4.4 上的 Nexus 7 上也看到了这个问题。

我有一个围绕此处找到的服务子类示例代码构建的应用程序:

http://developer.android.com/guide/components/services.html

我正在使用 HelloService。我一直有因打开太多文件而导致崩溃的问题,我逐渐将代码精简到项目中只有示例代码 ( attached ) 的地步。每次服务启动和停止时,它仍然会泄漏 3 个文件描述符。

每次启动和停止时,lsof 都会像这样添加 3 行:

com.cousi 11633     u0_a82   69       ???                ???       ???        ??? pipe:[193985]
com.cousi 11633     u0_a82   70       ???                ???       ???        ??? pipe:[193985]
com.cousi 11633     u0_a82   71       ???                ???       ???        ??? anon_inode:[eventpoll]

我的实际应用程序创建和停止服务的频率足够高,一段时间后,它达到 1024 的限制并被终止。

我进行了广泛的搜索,发现其他一些人可能也提到了同样的问题,但没有找到任何解决方案。

有什么想法吗?

谢谢!

最佳答案

尝试在 onDestroy() 中退出处理程序的 Looper

@Override
public void onDestroy() {
    mServiceLooper.quit();
    Toast.makeText(getApplicationContext(), "service done", Toast.LENGTH_SHORT).show();
}

实际上它看起来像是样本中的错误。

关于Android 服务示例代码泄漏文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935742/

相关文章:

linux - 打开文件过多错误,但 99.5% 的 inode 是免费的

java - android开机时如何启动activity?

android - 如何通过 MigLayout 手动计算宽度

mysql - AWS RDS 可用内存和交换空间使用量较低

Python C 扩展 - 内存泄漏

c - 如何在客户端连接时将其两个两个连接

file-descriptor - 增加文件描述符数量的 ulimit

Android 应用程序需要 Google Play 服务更新 - 打开按钮而不是更新

java - for 进入线程的进度对话框

函数中的 Swift UnsafeMutablePointer 内存分配和释放