5

我有一个 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

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

4

2 回答 2

0

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

于 2017-11-28T08:17:30.290 回答
-1

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

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

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

于 2013-08-09T22:44:41.673 回答