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

时间:2012-10-30 14:08:51

标签: android timer amazon-s3 android-asynctask timertask

我有一个Android应用程序,它使用计时器每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

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

当应用程序被杀死时,logcat会收到来自AndroidRuntime的消息:

FATAL EXCEPTION: main

有没有人对这些消息有所了解,或者如何修复?谢谢!

3 个答案:

答案 0 :(得分:0)

其他信息:以下代码全部位于片段中。

以下是启动计时器的代码:

    slideTimer = new Timer();
    slideTimer.schedule(new TimerTask() {          
        @Override
        public void run() {
            timerMethod();
        }
    }, 0, 5000);

以下是计时器调用的方法:

private void timerMethod()
{
    Activity activity = getActivity();

    if (activity != null)
        activity.runOnUiThread(timerTick);
}

这里是完成工作的地方(通过从远程存储的fileName加载imageView的AsyncTask):

final Runnable timerTick = new Runnable() {
    public void run() {

    MyAsyncTask task = new MyAsyncTask(imageView);
    task.execute(fileName);
};

答案 1 :(得分:0)

可能的内存泄漏。使用Leakcanary检测代码的哪个部分正在创建此代码。

答案 2 :(得分:-1)

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

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

基本上所有的Looper都是由我理解的线程运行的事物队列。