У меня есть приложение, которое выполняет множество асинхронных вызовов внешних API-интерфейсов для извлечения сведений об эскизе изображения для загрузки в мой RecyclerView (с помощью Glide), когда пользователь просматривает его.Recyclerview является «бесконечным», поскольку могут быть загружены тысячи изображений, если пользователь хочет прокручивать достаточно долго.
Я получаю следующую ошибку после прокрутки, может быть, сотни изображений:
W/Adreno-GSL: <gsl_ldd_control:541>:ioctl fd 55 code 0xc0200933 (IOCTL_KGSL_TIMESTAMP_EVENT) failed: errno 24 Too many open files
<ioctl_kgsl_syncobj_create:3977>: (38, 1f, 3907) fail 24 Too many open files
E/Parcel: fcntl(F_DUPFD_CLOEXEC) failed in Parcel::read, i is 0, fds[i] is -1, fd_count is 1, error: Too many open files
I/Adreno: DequeueBuffer: dequeueBuffer failed
E/NativeCrypto: AppData::create pipe(2) failed: Too many open files
Приложение никогда не падает, но остается замороженным до тех пор, пока я (немного подожду? И затем) из вкладки изприложение и обратно к нему.
Из проведенного мною исследования я узнал, что существует ограничение на количество одновременно открываемых файлов, но я не уверен, как это контролировать.
- Как узнать, сколько файлов открыто в данный момент?
- Как "приостановить" мой RecyclerView, ожидая освобождения новых файлов?
- Должен ли я делать что-то в моей AsyncTask, чтобы освободить файл (ы)?