我在屏幕上显示了一系列复杂的视图,我还需要在运行时动态切换视图,我通过删除视图和添加新视图(有时只是设置可见性)来实现。
现在的问题是视图需要花费大量时间来渲染(超过 7-8 秒)。
我在我的方法中添加了时间戳,所有这些似乎都很快返回。但即使在我的最后一个方法返回后,视图也不会呈现,我必须等待它实际显示。在那之后用户界面非常无响应,我ANR
经常得到。
谁能指出为什么它如此缓慢?
我在运行时使用Drawable.createFromPath()
. 这可能是问题吗?
我在屏幕上显示了一系列复杂的视图,我还需要在运行时动态切换视图,我通过删除视图和添加新视图(有时只是设置可见性)来实现。
现在的问题是视图需要花费大量时间来渲染(超过 7-8 秒)。
我在我的方法中添加了时间戳,所有这些似乎都很快返回。但即使在我的最后一个方法返回后,视图也不会呈现,我必须等待它实际显示。在那之后用户界面非常无响应,我ANR
经常得到。
谁能指出为什么它如此缓慢?
我在运行时使用Drawable.createFromPath()
. 这可能是问题吗?
我已经找到了相同的解决方案,并将其发布给面临类似问题的任何人。问题是由于视图嵌套很深。由于布局相当复杂,视图嵌套得相当深。在达到 14-15 级之后,性能开始急剧下降。在合并一些存根布局(占位符等)时,性能得到了极大的改善。层次结构查看器在调试此问题时非常有用。更多的观察结果是: 1. 嵌套时的相对布局非常慢,而线性布局则没有那么多。2. 软键盘在对话框中使用或在深度嵌套的相对布局中触发时反应迟缓(层次结构主要由相对布局组成。)
应用程序变得迟缓的原因之一是当您在 UI 线程中执行一些耗时的非 UI 活动时。我建议您仔细查看您的代码并确定哪些活动需要时间,您可以使用AsyncTask
这些活动来执行这些活动。
有关更多信息,请参阅此链接:http: //developer.android.com/reference/android/os/AsyncTask.html