Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

动态addView实现在性能上是否不如Recyclerview实现 #1

Open
aBenVip opened this issue Dec 26, 2019 · 2 comments
Open

动态addView实现在性能上是否不如Recyclerview实现 #1

aBenVip opened this issue Dec 26, 2019 · 2 comments

Comments

@aBenVip
Copy link

aBenVip commented Dec 26, 2019

动态addView实现在性能上是否不如Recyclerview实现,我之前自定义EditText实现了一套富文本,但是ImageSpan处理很麻烦,后来采用Recyclerview实现了一套,后续没有优化,还有一些体验上的问题

@yangchong211
Copy link
Owner

如果使用recyclerView来实现,其实也是需要EditText和ImageView作为item的。但是有几个点不太好实现:
1.比如在文本内容中间,插入图片,则会文本做出拆分,则需要分割字符串,分割成两个EditText,并在两个EditText中间插入图片
2.如果两个文本中间,有张图片,点击删除图片,则需要把两个文本合成一个文本控件也不太好处理
3.span处理的确是个麻烦的事情,以及边界逻辑判断,折行,合并是个很麻烦的事情
4.recyclerView实现富文本的话,如何解决焦点冲突的问题,以及光标删除控件问题

再来探讨一下动态addView是否影响性能
1.首先富文本编辑状态:ScrollView + LineaLayout + n个EditText+Span + n个ImageView
2.该布局不存在嵌套,只有两层布局,并不复杂,绘制这块你用开发者模式查看不会有卡顿或者过渡绘制影响
3.recycerView内部做了四级缓存,在列表很长的时候会有比较明显性能提升,主要是控件从可见到不可见,以及不可见到可见对控件避免创建
4.富文本把它看作一个列表,在列表只有十几条或者几十条的情况下,其实性能并无影响。因为应该不会出现几百条情况,区别是很小的,如同一个线性布局中,你包裹几十个不同布局,只存在一层,其结构简单,如果你profiler做过测试,并无大碍
5.进一步测试,你可以动态addView一百个,然后看看测试中内存曲线情况
6.RecyclerView使用场景是列表,即item复用,item很复杂时,或者列表很长时,用这个的确不错,但是考虑富文本特殊性,其思路很简单,但是各种边界逻辑比较复杂,且交互性很强,这点用RecyerlView的item还是很少的,或者能否发一下你的demo,我也学习一下,参考一下思路,左右对比一下

@aBenVip
Copy link
Author

aBenVip commented Dec 26, 2019

合并拆分字符串的处理相对是比较简单的,之后notifyItem就行,我这边目前存在的问题一个是样式的合并没有做处理,导出html的时候会有很多无用的标签,其次是recyclerview中的输入框光标的定位问题,我看中的是recyclerview的复用能力,光标位置之类的都使用实体记录,正常长度的文本是没有区别的,但是如果着眼于长文本或者文字图片来回插入的情况,有着复用是相对较好的实现。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants