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

时间:2016-01-21 22:40:49

标签: android memory-leaks file-descriptor

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

我有一个围绕Service子类示例代码构建的应用程序:

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的限制并被杀死。

我一直在广泛搜索,并找到了其他一些可能引用同一问题的人,但未找到解决方案的任何内容。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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