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

Android Service example code leaking file descriptors

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

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

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();
}

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