我正在调查提高EditText
性能的方法,特别是在加载时间方面。当加载几千字或更多字的大型文档时,调用setText
可以在我的一些测试设备和模拟器上冻结UI几秒钟。
作为回应,我已经探索了几种可能的解决方案,但都没有产生令人满意的结果。我试图按段落拆分大型文档,并将每个段落加载到自己的RecyclerView
或ListView
行中。由于causes jerky scrolling的问题,RecyclerView完全没有希望了。 ListView
提供了很好的,几乎是即时的加载时间,并且非常好的滚动(虽然不如一个EditText
块好)但是存在EditText
阻塞行{{3}的问题}}。我还尝试在EditText
中的onProgressUpdate
部分更新AsyncTask
部分,希望用户可以在部分加载时与文本进行交互,但加载时间基本不受影响。
我探索过的最有希望的途径涉及改变AndroidManifest.xml
中的以下元素:
android:hardwareAccelerated="false"
我在Google Developers频道上观看了lose focus when selected的以下细分后得到了这个想法。当我打开GPU配置文件渲染时,我发现每次调用setText
时橙色条(代表“处理时间”)都在飙升。当我关闭硬件加速时,setText
性能大幅提升,尽管其他领域(如滚动)变得更糟。
我想了解的是 - 为什么会发生这种情况?另外,有没有办法可以使用这些信息来进一步提高性能?我可以简单地以编程方式关闭和打开硬件加速吗?
值得一提的是,一些设备,如运行API 22的Nexus 7 2013,在大型文档上调用setText时不会遇到任何问题,而其他设备真的很难加速硬件加速。我只想了解更好的情况,以便我可以尝试解决它!谢谢。
修改
以下是YouTube clip,任何人都可以下载我的一个示例测试应用来复制上面列出的问题。我还在网站上发布了三个视频,展示了这些问题,我将在下面进行讨论:
我做了三个视频演示,显示这个应用程序正在运行 a link to a GitHub Repository
hardwareAccelerated
属性设置为true
AndroidManifest
,然后使用具有相同属性的同一部手机 设置为false
,并启用硬件加速的单独Huawei Honor Holly running KitKat 4.4.2。在每种情况下都会启用GPU分析。