首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在RecyclerView中离开屏幕后,ImageView似乎很快就会被回收

在RecyclerView中,当一个Item离开屏幕后,ImageView似乎很快就会被回收。这是因为RecyclerView使用了回收复用机制来优化性能和内存消耗。

当一个Item离开屏幕时,RecyclerView会将该Item对应的View从屏幕上移除,并将其放入一个回收池中。这样做的目的是为了避免频繁地创建和销毁View,从而提高滚动的流畅性和性能。

在RecyclerView中,ImageView是常用的用于展示图片的控件。当一个Item离开屏幕时,ImageView所占用的内存资源会被释放,以便被其他Item复用。这样可以减少内存的占用,提高应用的性能。

然而,由于ImageView在离开屏幕后会被回收,因此需要注意一些问题:

  1. 图片加载:当一个Item重新进入屏幕时,需要重新加载图片。为了避免重复加载和提高加载速度,可以使用图片加载库,如Glide或Picasso。这些库可以帮助我们异步加载图片,并自动处理缓存、压缩等操作,提高图片加载的效率。
  2. 图片错位:由于ImageView的回收复用机制,可能会导致图片错位的问题。为了解决这个问题,可以在加载图片时,使用一个占位图或者设置ImageView的tag来标识当前加载的图片,以确保图片加载完成后,将其正确显示在对应的Item上。
  3. 图片内存管理:由于RecyclerView中的Item可能会频繁地进入和离开屏幕,如果不注意内存管理,可能会导致内存泄漏或内存溢出的问题。因此,在使用ImageView加载图片时,需要及时释放资源,避免内存泄漏。可以在RecyclerView的Adapter中的onViewRecycled()方法中进行资源的释放操作。

总结起来,RecyclerView中的ImageView在离开屏幕后会被回收,这是为了优化性能和内存消耗。为了正确加载和显示图片,我们可以使用图片加载库,并注意处理图片加载、错位和内存管理的问题。

腾讯云相关产品推荐:

  • 腾讯云对象存储(COS):用于存储和管理大规模的非结构化数据,支持图片、视频等多媒体文件的存储和访问。详情请参考:腾讯云对象存储(COS)
  • 腾讯云云服务器(CVM):提供可扩展的计算能力,用于搭建和部署应用程序。详情请参考:腾讯云云服务器(CVM)
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。详情请参考:腾讯云人工智能(AI)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

得物App白屏优化系列|归因篇

整体流程图上图片获取既然是站在用户视角,那么我们就只需要检测上的ImageView即可,根据线上用户反馈的信息,白屏问题主要集中动态流和商品流这类存在大量图片加载的recyclerView,那么根据...为了减少对内存的占用,我们通过draw方法将上的ImageView绘制到指定的50*50的Bitmap,这里注意必须要使用draw来获取Bitmap,不可以从图片库直接获取,因为主线程卡顿也有可能造成白屏...由于此处是异步执行ImageView的draw方法,并且我们持有的其实是ImageView的弱引用,因此需要在draw之前判断下其内部的bitmap是否已经被回收,如果是圆角图还需要判断下path对象是否已经被回收...离检测onAttach和onDetach仅适用于recyclerview,对于其他的布局图片上屏/离时未必会触发这两个回调,因此需要做些适配。...Submit信息记录了图片上屏、完成加载、离开屏幕等核心时间节点。针对每个Producer我们也补充了自定义的字段属性,如:网络队列、解码队列信息。图片元信息、业务调用标签。

19510

Android开发:ListView、AdapterView、RecyclerView全面解析

工作原理:当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...当第1个item离开屏幕时,此item的view就会被拿来重用(用于显示第8个item的内容)。原理如下图显示 ? ListView的使用 1....工作原理 当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...当第1个item离开屏幕时,此item的view就会被拿来重用(用于显示第8个item的内容)。原理如下图显示 !...答:从名字上看RecyclerView,即回收循环视图,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置,可以看出其高度的解耦,给予你充分的定制自由 缺点: RecyclerView

3.5K30
  • android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)

    第一:将主逻辑代码类继承FragmentActivity类并实现OnGestureListener监听和OnTouchListener监听,同一时候onCreate方法创建GestureDetector...因此onTouch()方法,我们要进行例如以下的处理: @Override public boolean onTouch(View v, MotionEvent event) { // 手势里除了...singleTapUp,没有其它检測up的方法 if (event.getAction() == MotionEvent.ACTION_UP) { GESTURE_FLAG = 0;// 手指离开幕后...return false; } 通过onTouch()方法调用gestureDetector.onTouchEvent(event)方法时,它会去调用onScroll()方法,这样该方法通过手势识别来完毕调节音量...那之后的scroll事件都处理音量进度,直到离开屏幕运行下一次操作 if (GESTURE_FLAG == GESTURE_MODIFY_PROGRESS) { // distanceX

    2.5K30

    RecyclerView 刷新列表数据的 notifyDataSetChanged() 为什么是昂贵的?

    (); } } } } RecyclerView 将所有离缓存的 ViewHolder 也都做了无效化处理。...还将它们回收到缓存池。 至此,又可以做一个阶段性总结: RecyclerView 真正刷新列表之前,将一切都无效化了。包括当前所有被填充表项及离缓存的 ViewHolder 实例。...,即onLayout()会被调用: ?...因为重新布局之前表项都被添加了FLAG_INVALID标志位,只要表项未被移除,它们都会被回收到缓存池 RecyclerViewPool 。(从 Profiler 调用链也得到了证实。)...总结 RecyclerView 使用观察者模式刷新自己,刷新即是通知所有的观察者。 观察者被抽象为AdapterDataObserver,它们维护AdapterDataObservable

    3.3K20

    浅谈RecyclerView(完美替代ListView,GridView)

    首先总结下RecyclerView的特点: 1.支持不同方向,不同排版模式,实现多种展现数据的形式,涵盖了ListView,GridView,瀑布流等数据表现的形式 2.内部实现了回收机制,无需我们考虑...的基本使用  android studio  build.gradle文件 dependencies添加  compile 'com.android.support:recyclerview-v7:...{    自定义适配器MyRecycleAdapter,首先要写一个构造方法,因为有数据源,所有构造方法里必然有List private List strings...首先看一下以往我们对listview,gridview等等的删除某一项的操作 先在数据源删除该位置的数据,然后刷新整个适配器,那么就可能会造成列表闪的问题,还有为了删除添加一个数据项而操作整个数据源的问题..., int position) { items.add(position, item); //数据源先添加该数据 notifyItemInserted(position); //某个位置刷新即可

    2.3K60

    一篇博客理解Recyclerview的使用

    RecyclerView是support-v7包的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview回收view也可以看出...封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。...,我们可以Adapter添加这个回调接口: 例子2:可以点击的RecyclerView 原工程基础上对Adapter进行修改,添加OnItemClickListener接口,由于具体点击后的逻辑是交给...效果如下: 5.RecyclerView实现瀑布流 例子4:用RecyclerView打造瀑布流效果 其中大部分内容实现和基本的RecyclerView使用是一样的,就不多叙述了,一个地方不同...,就是我们适配器绑定ViewHolder的方法需要重新给我们的itemView布局设置height,这里是生成随机数来设置高度的。

    67030

    关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

    getItemId() 返回 adapter 通过 getItemId(int position) 为该 item 生成的 id,没有 adapter 重写那个方法的话,返回 RecyclerView.NO_ID...,可以用来处理什么场景,做些啥工作: onViewRecycled():当 ViewHolder 已经确认被回收,且要放进 RecyclerViewPool 前,该方法会被回调。...首先需要明确,RecyclerView回收机制工作时,会先将移出屏幕的 ViewHolder 放进一级缓存,当一级缓存空间已满时,才会考虑将一级缓存已有的 ViewHolder 移到 RecyclerViewPool...另外,注释也说了,该方法的回调是 ViewHolder 放进 RecyclerViewPool 前,而 ViewHolder 放进 Pool 会被 reset,因为上一节也说过,其实 ViewHolder...通常我们都说自定义 View 重写这几个方法来将触事件拦截,交由自己处理。

    3.1K60

    Android 基于RecyclerView实现的歌词滚动自定义控件

    而对于歌词离开幕后的一段时间后自动回到该位置。同样的,还是需要使用 smoothScrollBy() 方法移动。而移动多少呢?这是个问题。...第三种: 当歌词第四行之后但是最后一行之前。 第四种: 当歌词最后一行之后。 其实我们根据自己想要在显示第几行来判断需要移动多少个位置。...RecyclerView 。...但是我们 RecyclerView 是处理了点击事件的,而且本身 RecyclerView 已经重写了拦截了该事件的。而且一般是父 View 是不拦截事件的。...这样你就会被问题牵着走,而不能从整体上去看问题。 事情总是一点一点一点地解决。写代码的过程,总有我们当时不知道的,不会的,不知道怎么做的。

    1.8K10

    RecyclerView 实现gallery画廊效果

    还有一点,ListViewconvertView是复用的,RecyclerView,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持ViewHolder...最后主Activity设置监听: mAdapter = new GalleryAdapter(this, mDatas);   mAdapter.setOnItemClickLitener(new...我还希望,如果我给指示器一个加速度,即使手指离开,下面还在滑动,上面也会联动 。...而且我还想做些优化,直接在ACTION_MOVE回调,触发的频率太高了,理论上一张图片只会触发一次~~ 4、优化与打造真正的Gallery效果 既然希望手指离开还能联动,那么不仅需要ACTION_MOVE...好了,看完这边博客,相信大家对于RecyclerView有了一定的认识,甚至对于如何改造一个控件也多了一份了解~~ 如果觉得不错,留个言或者点个赞,表示对我的支持  源码点击下载

    2.8K50

    RecyclerView必知必会

    Demo3: RecyclerView实现拖拽、侧滑删除。 Demo4: RecyclerView问题。 Demo5: RecyclerView实现setEmptyView()。...其实万能适配器的概念在ListView已经存在了,即base-adapter-helper。 这里我们只针对RecyclerView,聊聊万能适配器出现的原因。...对于RecyclerView的Item Animator,有一个常见的坑就是“闪问题”。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: 为了支持嵌套滑动...实现需要注意的点有: 我们为ToolBar的app:layout_collapseMode设置为pin,表示折叠之后固定在顶端,而为ImageView的app:layout_collapseMode设置为

    4.7K20

    RecyclerView 必知必会

    Demo3: RecyclerView实现拖拽、侧滑删除。 Demo4: RecyclerView问题。 Demo5: RecyclerView实现setEmptyView()。...其实万能适配器的概念在ListView已经存在了,即base-adapter-helper。 这里我们只针对RecyclerView,聊聊万能适配器出现的原因。...对于RecyclerView的Item Animator,有一个常见的坑就是“闪问题”。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: ?...实现需要注意的点有: 我们为ToolBar的app:layout_collapseMode设置为pin,表示折叠之后固定在顶端,而为ImageView的app:layout_collapseMode设置为

    4.2K90

    Android 使用自定义RecyclerView控件实现Gallery效果

    还有一点,ListViewconvertView是复用的,RecyclerView,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持ViewHolder...最后主Activity设置监听: mAdapter = new GalleryAdapter(this, mDatas); mAdapter.setOnItemClickLitener(new OnItemClickLitener...我还希望,如果我给指示器一个加速度,即使手指离开,下面还在滑动,上面也会联动 。...而且我还想做些优化,直接在ACTION_MOVE回调,触发的频率太高了,理论上一张图片只会触发一次~~ 4、优化与打造真正的Gallery效果 既然希望手指离开还能联动,那么不仅需要ACTION_MOVE...好了,看完这边博客,相信大家对于RecyclerView有了一定的认识,甚至对于如何改造一个控件也多了一份了解~~ 如果觉得不错,留个言或者点个赞,表示对我的支持 源码点击下载 总结 以上所述是小编给大家介绍的

    1.1K40

    RecyclerView 必知必会

    Demo3: RecyclerView实现拖拽、侧滑删除。 Demo4: RecyclerView问题。 Demo5: RecyclerView实现setEmptyView()。...其中next()调用了getViewForPosition(currentPosition),该方法是从RecyclerView回收机制实现类Recycler获取合适的View,在后文的回收机制中会介绍该方法的具体实现...对于RecyclerView的Item Animator,有一个常见的坑就是”闪问题”。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: ?...实现需要注意的点有: 我们为ToolBar的app:layout_collapseMode设置为pin,表示折叠之后固定在顶端,而为ImageView的app:layout_collapseMode设置为

    2.6K70

    ListView详细介绍与使用

    假如当屏幕一次可以显示 x 个 item 时(不用是完整的),那么 ListView 会创建 x+1 个视图;当第1个 item 离开屏幕的时候,此时这个 item 的 View 就会被回收,再入的...只有 item 完全离开幕后才会复用,这也是为什么 ListView 要创建比屏幕需要显示视图多 1 个的原因:缓冲显示视图。...第 1 个 item 离开屏幕是有一个过程的,会有 1 个 第一个 item 的下半部分 & 第 X+1 个 item 的上半部分同时屏幕显示的状态 这种情况是没法使用缓存的 View 的。...实例演示: 假如屏幕一次只能显示 5 个 item,那么 ListView 会创建 (5+1)个 item 视图;当第 1 个 item 完全离开幕后才会回收至缓存,从而复用。...形式的数据绑定到列表作为数据源,支持泛型操作 步骤: xml 文件布局上实现 ListView Activity 定义数据源(列表或者数组) 构造 ArrayAdapter 对象,设置适配器

    1.5K20

    Android图片加载库内存缓存策略分析

    Universal ImageLoader的内存缓存缺陷: 我们无法判断内存缓存的Bitmap,是否正被ImageView显示着,导致我们无法对离开缓存的Bitmap做任何操作,只能放任它被系统自动回收...Glide先从Memory后从Active寻找,有没有想要的资源,如果找到就可以直接显示。没有资源的情况下,Glide会开始加载解码的任务。...在这个过程,我们没有将图片放入memory。但此时图片不会被回收。因为ImageView还显示着这个图片。 那么,图片是何时被放入memory呢?...当我们用某一个ImageView加载图片时,我们首先会从View的tag中找到View已经绑定的资源,然后释放资源。释放资源时,我们便会将这个不再需要显示的资源放入memory。...接下来Glide是真正的优化:如果我们将资源放入memory时,memory已满。此时,我们的操作变的非常灵活了。因为,此时memory中所有的图片都是没有被展示的。

    84720

    Kotlin入门(23)适配器的进阶表达

    前面介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项屏幕上看不到了,则系统会自动回收相应的视图对象。...为方便理解循环适配器的Kotlin编码,下面以微信的公众号消息列表为例,给出对应的消息列表Kotlin代码: //ViewHolder构造时初始化布局的控件对象 class RecyclerLinearAdapter...onItemLongClick(v, position)             true         }     }     //ItemHolder的属性构造时初始化     inner...    //绑定视图持有者的各个控件对象,需要子类重写     override abstract fun onBindViewHolder(holder: RecyclerView.ViewHolder...这下不管是Activity代码,还是适配器代码,均可将控件名称拿来直接调用了。

    1.8K41

    Android ListView 与 RecyclerView 对比浅析--缓存机制

    同时也希望能通过本文,让大家快速了解RecyclerView与ListView缓存机制上的一些区别,使用上也更加得心应手吧。...PS:相关知识: ListView与RecyclerView缓存机制原理大致相似,如下图所示: 过程,离的ItemView即被回收至缓存,入的ItemView则会优先从缓存获取,只是ListView...共同使用,特定场景下,如viewpaper+多个列表页下有优势.客观来说,RecyclerView特定场景下对ListView的缓存机制做了补强和完善。...RecyclerViewmCacheViews(屏幕外)获取缓存时,是通过匹配pos获取目标位置的缓存,这样做的好处是,当数据源数据不变的情况下,无须重新bindView: 而同样是离缓存,ListView...RecyclerView剖析:http://blog.csdn.net/qq_23012315/article/details/51096696 如果您觉得我们的内容还不错,请转发到朋友圈,和小伙伴一起分享吧

    1.3K20
    领券