我有一个安卓应用程序,它使用计时器每5-10秒调用一次AsyncTask (使用java.util.Timer和java.util.TimerTask)。AsyncTask从Amazon AWS S3数据库获取图像数据,并加载主UI活动的ImageView。
这在一两个小时内工作得很好,但随后我收到一条隐秘的错误消息,应用程序就会被终止。错误消息来自"Looper“,它说:
Could not create epoll instance. errno=24或
Could not create wake pipe在web上搜索似乎表明问题可能与文件描述符(打开的文件描述符太多?)有关。我已经检查了代码,但没有看到任何文件、流或连接未关闭的地方。
当应用程序被终止时,logcat会收到一条来自AndroidRuntime的消息:
FATAL EXCEPTION: main有没有人有关于这些消息的线索,或者如何修复?谢谢!
发布于 2017-11-28 16:17:30
可能存在内存泄漏。使用Leakcanary来检测到底是哪部分代码创建了它。
发布于 2013-08-10 06:44:42
当我使用警报来太快地触发任务时,我的代码中也出现了同样的错误。
我通过更改我的代码修复了它,这样它只会被添加到警报中,以便在方法的平均运行时间之后再次运行(加上一些额外的时间以防万一)。如果您添加任务的速度比它们完成执行的速度更快,那么您最终会填满Looper,从而抛出错误。
根据我的理解,循环本质上就是一个由线程运行的事物队列。
https://stackoverflow.com/questions/13140798
复制相似问题