我需要在 TextView 中设置一个非常长的字符串(一个边缘情况),该字符串仅在一行中。用户案例是这样的:用户必须能够选择整个字符串以将其复制到剪贴板(如果设备的剪贴板允许)。问题是:每当字符串变得超大时,UI 就会开始挂起。它是渐进的,我的意思是,在 13,000 个字符时,它会很好。在 65000 个字符时,UI 加载时间约为 156 秒。
通过运行分析器,我看到大部分“繁重的工作”都是在这种方法nComputeLineBreaks()中完成的,它本质上是一种计算段落换行符数量的本地方法。
我的代码中也没有太多内容,我只是在做textview.text = text.
尝试过的可能解决方案:
我看到了谷歌从 API 28 提供的这个新 API,它(有点)与 API 21 兼容。我指的是PrecomputeText,我试图按照这个官方 android 博客来尝试提高性能,但这是徒劳的
我试图在协程中创建一个新的 textview 以允许它计算它需要的内容,然后删除我以前的视图并附加新的视图。仍然造成严重滞后
我确实设置了一个maxLines希望它会减少换行符的计算,但它失败了
另外,这里有一些相关的帖子,我发现对我的情况没有多大帮助:
使用 webview 是答案之一。但是,在我的情况下,只能在一行中显示的水平 textview,webview 似乎无关紧要
从本质上讲,根据我收集的信息, setText 调用是罪魁祸首。不幸的是,这意味着操纵 UI,据我所知,这只能在主线程上实现,这会导致丢帧。
任何想法都非常受欢迎!
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |