为什么ScrollView 不要嵌套ListView
2015-12-18 本文已影响4092人
Daemon1993
今天发现一个问题
ScrollView 如果一直滚动 他的整个长度其实是一直存在的
也就是说 你滚两屏 其实上一屏的数据还在,占用内存还在 只是你看不见了
这样问题来了
我们由于各种原因 在开发中不得不考虑ScrollView嵌套ListView
ListView是有自己的缓存机制 占用内存总是一屏幕
但是如果将ListView嵌套到ScrollView中 问题来了
我觉得ListView的缓存机制会失效 这样需求我们是达到了
但是数据很多的情况下 内存占用太大
甚至与OOM
特此做了一个测试 发现SCrollView嵌套ListView的时候所有的Item都是新建的 ListView的缓存机制失效了
所以在UI设计稿讨论的时候 我们必须要坚持 让设计师设计出来符合规范的设计稿 一般的ListView addhead就行
![](https://img.haomeiwen.com/i831873/261b56589f3ece96.gif)
顺带贴上内存图 会发现ScrollView里面的ListView之后内存暴涨
![](https://img.haomeiwen.com/i831873/f655d21aef294c18.gif)
现在看看RecycleView 替换ListView情况 看打印的log发现情况一致 ScrollView里面的缓存机制都失效
![](https://img.haomeiwen.com/i831873/5e9a6f29a468b5b3.png)
所以在项目制定时期 千万要设计好不要有ScrollView嵌套ListView的相关需求
如果确实需要一些UI效果
比如 下图这样 可以考虑使用新控件CoordinatorLayout
![](https://img.haomeiwen.com/i831873/8766e8c60eb4e0f3.gif)