Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >滚动RecyclerView时“打开的文件太多”

滚动RecyclerView时“打开的文件太多”
EN

Stack Overflow用户
提问于 2018-10-04 12:33:06
回答 2查看 1.4K关注 0票数 0

我有一个应用程序,它对外部app进行多次异步调用,以获取有关图像缩略图的详细信息,以便在用户滚动时加载到我的RecyclerView中(使用幻灯片)。回收站是“永无止境的”,因为如果用户想要滚动足够长的时间,可以加载数千张图像。

在滚动了大概100张图片后,我得到了以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

这个应用程序从来没有崩溃,但它仍然冻结,直到我(等一等?然后)退出应用程序,然后重新进入应用程序。

从我所做的研究中,我了解到一次可以打开多少文件是有限制的,但我不知道如何控制它。

  1. 我如何知道当前打开了多少个文件?
  2. 在等待更多文件释放时,我如何“暂停”我的RecyclerView?
  3. 我应该在我的AsyncTask中做些什么来释放文件吗?
EN

回答 2

Stack Overflow用户

发布于 2018-10-04 13:28:14

当屏幕上看不到项时,您应该取消api调用和其他异步工作。因为如果用户快速滚动,您将有数百个无用的任务正在运行。

因此,当视图被滚动时,只需取消您的任务。

您可以在RecylerView的void onViewRecycled (VH holder)方法中完成所有这些工作。

来自文件:

void onViewRecycled (VH holder) 在此适配器创建的视图已被回收时调用。 当RecyclerView.LayoutManager决定不再需要附加到其父RecyclerView时,视图就会被回收。这可能是因为它失去了可见性,或者由仍然附加到父RecyclerView的视图表示的一组缓存视图。如果项目视图有大量或昂贵的数据绑定到它,如大位图,这可能是一个释放这些资源的好地方。 RecyclerView在清除ViewHolder的内部数据并将其发送到RecycledViewPool之前调用此方法。这样,如果ViewHolder在回收之前保存了有效信息,您可以调用getAdapterPosition()来获取它的适配器位置。

票数 2
EN

Stack Overflow用户

发布于 2018-10-04 12:59:43

我相信您所要做的就是在下载文件之后关闭连接/套接字:

Socket accept - "Too many open files"

如果您正在缓存下载的映像,则还应正确关闭FileInputStreamFileOutputStream

此外,当根视图被销毁时,取消注册适配器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
protected void onDestroy() {
    super.onDestroy();
    recyclerView.setAdapter(null);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52654745

复制
相关文章
恢复 RecyclerView 的滚动位置
您可能在开发过程中遇到过这种情况,在 Activity/Fragment 被重新创建后,RecyclerView 丢失了它之前保有的滚动位置信息。通常这种情况发生的原因是由于异步加载 Adapter 数据,且数据在 RecyclerView 需要进行布局的时候尚未加载完成,导致 RecyclerView 无法恢复到之前的滚动位置。
Android 开发者
2020/10/16
1.5K0
更强大的滚动控件RecyclerView
更强大的滚动控件RecyclerView 新建FruitAdapter02: package com.example.listviewtest; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import an
Dream城堡
2018/12/14
4790
RecyclerView 实现横向滚动效果
我相信很久以前,大家在谈横向图片轮播是时候,优先会选择具有HorizontalScrollView效果和ViewPager来做,不过自从Google大会之后,系统为我们提供了另一个控件Recycler
xiangzhihong
2018/02/05
7.9K0
RecyclerView 实现横向滚动效果
android-recyclerview-滚动监听
RecyclerView的滚动事件OnScrollListener研究 http://www.open-open.com/lib/view/open1477623086381.html
tea9
2022/07/16
1.1K0
RecyclerView 实现横向滚动效果
我相信很久以前,大家在谈横向图片轮播是时候,优先会选择具有HorizontalScrollView效果和ViewPager来做,不过自从Google大会之后,系统为我们提供了另一个控件RecyclerView。RecyclerView是listview之后的又一利器,它可以实现高度的定制。今天就利用RecyclerView实现我们需要的相册效果。
全栈程序员站长
2022/10/02
5.7K0
RecyclerView 实现横向滚动效果
RecyclerView滚动到指定位置
1、mLayoutManager private void moveToPosition(int position) { if (position >= 0) { mLayoutManager.scrollToPositionWithOffset(3, 0); } } 2、LinearSmoothScroller mTopSmoothScroller = new TopSmoothScroller(getActivity()); priva
用户9854323
2022/06/25
1.8K0
教你简单实现RecyclerView自动滚动
当RecyclerView内容过多,超出屏幕的时候,需要让它自己滚动展示数据,尤其是某些Android设备处于高处,或是不可被触摸点击的,这样的情况下,让其自己滚动展示数据尤为重要了 自动滚动的方案有很多种,目前比较常见又最简单的一种是:继承至RecyclerView,并实现runnable方法,每间隔10ms(delayTime)就去执行scrollby(x,y)方法,其中delayTime和x,y的值决定了滚动速度。
程思扬
2023/07/25
1.1K0
vim打开文件时提示E325[通俗易懂]
它的意思是说在这个目录下有一个隐藏文件,这个隐藏文件是未保存版本的这个文件,要解决这个很简单,直接删除这个隐藏文件就行。 我们先看一下这个目录下的所有文件:
全栈程序员站长
2022/08/29
8560
vim打开文件时提示E325[通俗易懂]
office xls 文件已损坏 无法打开 word在试图打开文件时遇到错误
转自:http://windyli.blog.51cto.com/1300305/326491
全栈程序员站长
2022/09/01
2.5K0
手把手教你打造RecyclerView滚动特效
最近开发中遇到这样的需求,recyclerview的item随滚动改变大小和透明度。这个效果看起来挺有动感的,似乎实现起来有点复杂,其实不然,接下来将带领大家手把手实现这个效果。
代码咖啡
2018/08/28
2.8K0
手把手教你打造RecyclerView滚动特效
解决在打开word时,出现 “word 在试图打开文件时遇到错误” 的问题(亲测有效)[通俗易懂]
最近在网上查找期刊论文的模板时,发现从期刊官网下载下来的论文格式模板,在本地用word打开时,出现错误,情况如下
全栈程序员站长
2022/09/03
4.3K0
解决在打开word时,出现 “word 在试图打开文件时遇到错误” 的问题(亲测有效)[通俗易懂]
排查Linux下C语言句柄打开太多的问题
又检查了下,是因为close函数没有彻底关闭掉socket导致的一直增加句柄的操作。
手撕代码八百里
2023/10/19
1780
RecyclerView滚动到指定位置的一种姿势。
其实这个问题没有什么难度了,下面的两种方式都可以实现,但是效果可能并不是我想要的。
JarvanMo
2018/09/06
5.6K0
Android必知必会 - RecyclerView 恢复上次滚动位置
记录 RecyclerView 滚动位置并恢复是一个很常见的需求,通常需要精准恢复到上次的位置。
他叫自己MR.张
2020/05/28
2.1K0
点击加载更多

相似问题

打开和关闭大量文件时打开的文件太多

25

启动进程时“打开的文件太多”

23

当键盘打开时,相应地向上滚动RecyclerView

71

打开的文件太多

70

打开太多的文件

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文