Android 错误:“无法创建 epoll 实例”或“无法创建唤醒管道”

Posted

技术标签:

【中文标题】Android 错误:“无法创建 epoll 实例”或“无法创建唤醒管道”【英文标题】:Android error: "Could not create epoll instance", or "Could not create wake pipe" 【发布时间】:2012-10-19 21:34:38 【问题描述】:

我有一个 android 应用程序,它使用计时器每 5-10 秒调用一次 AsyncTask(使用 java.util.Timer 和 java.util.TimerTask)。 AsyncTask 从 Amazon AWS S3 数据库中获取图像数据,并为主 UI Activity 加载 ImageView。

这可以正常运行一两个小时,但随后我收到一条神秘的错误消息并且应用程序被终止。错误消息来自“Looper”并说:

Could not create epoll instance.  errno=24

Could not create wake pipe

在网上搜索似乎表明问题可能与文件描述符有关(打开的文件描述符太多?)。我浏览了代码,但没有看到任何文件、流或连接未关闭的地方。

当应用程序被杀死时,logcat 会从 AndroidRuntime 收到一条消息:

FATAL EXCEPTION: main

有没有人知道这些消息,或者如何解决?谢谢!

【问题讨论】:

有很多代码,我不确定哪些部分可能导致错误。我主要是在寻找可能导致此类错误消息的任何线索。谢谢。 我怀疑互联网关于文件描述符的说法是正确的,请发布计时器调用的部分。 我的假设:这是定时器造成的!所以发生的事情是looper运行时间过长并且使用了太多资源,这可能会阻止垃圾收集器,这是我的假设。 【参考方案1】:

可能的内存泄漏。使用Leakcanary 来检测代码的确切部分正在创建它。

【讨论】:

【参考方案2】:

当我使用警报过快地触发任务时,我的代码中出现了同样的错误。

我通过更改我的代码来修复它,以便它只被添加到警报中,以便在方法的平均运行时间之后再次运行(加上一点额外的时间以防万一)。如果您添加任务的速度比它们完成执行的速度更快,那么您最终会填满 Looper,这会引发错误。

据我所知,Looper 本质上是一个由线程运行的事物队列。

【讨论】:

以上是关于Android 错误:“无法创建 epoll 实例”或“无法创建唤醒管道”的主要内容,如果未能解决你的问题,请参考以下文章

android.Android() 上的 QPython 错误

Flutter Android Build Gradle错误配置根项目'android'?

Android Studio编译错误总结

android为啥会有以下错误?

Android Studio Android 资源链接失败错误.. AAPT:错误:找不到资源 android:attr/lStar。在 values.xml 105

无法构建 CastVideos-android,错误:路径名错误