android - 添加视图太慢
android - adding views is too slow
我需要向 ScrollView 添加大约 10 个视图,我使用以下代码
final LinearLayout item_div = (LinearLayout)activity.findViewById(R.id.item_div);
final LayoutInflater inflater = (LayoutInflater)context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < itemArray.length(); i++) {
View itemTemplate = inflater.inflate(R.layout.item, null);
item_div.addView(itemTemplate);
}
但问题是这个过程大约需要 1-2 秒,它阻塞了主要 UI,等待不是从服务器获取数据,而是直接来自添加视图(他们有点重)。现在我的问题是,我可以使用新线程或后台服务来执行此操作吗?任何类型的线程或后台任务都可以处理此类视图问题,还是在后台执行此操作毫无意义,我应该考虑 RecyclerView
或其他一些解决方案?谢谢
can I use a new thread or background service to do this
不,你不能从后台线程中触及你的UI,否则会抛出异常
or it's pointless to do it in the background and I should consider recyclerview or some other solutions
没有看到您采用的方法的全部目的,因此很难给出任何答案,但如果您只需要可滚动的容器,RecyclerView
可能会伸出援手。此外,也许您需要显示的子视图的组合数量有限,您可以考虑准备组合布局,然后只扩充一个,而不是进行 10 个单独的扩充。其他方法是从代码创建您的子视图,但我将其保留为最后一个检查选项。
事实证明,处理我的问题的最佳方法是将 ListView 与 Adapeter 一起使用,或者更好(但也更难)的方法是使用 RecycleView。
无论如何,我通过使用 ListView
在我的列表中获得了相当不错的表现
我可以通过 运行 AsynTask 中的膨胀视图或使用 Concurrent API 来做到这一点,因为我的 accordion/collapsing 列表列表不适合 RecyclerView ViewHolder以编程方式在 LinearLayout 中添加视图时,由于 UI 被阻止,模式跳帧过多
.在这里查看我的回答,它可能会给您一些想法
我需要向 ScrollView 添加大约 10 个视图,我使用以下代码
final LinearLayout item_div = (LinearLayout)activity.findViewById(R.id.item_div);
final LayoutInflater inflater = (LayoutInflater)context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < itemArray.length(); i++) {
View itemTemplate = inflater.inflate(R.layout.item, null);
item_div.addView(itemTemplate);
}
但问题是这个过程大约需要 1-2 秒,它阻塞了主要 UI,等待不是从服务器获取数据,而是直接来自添加视图(他们有点重)。现在我的问题是,我可以使用新线程或后台服务来执行此操作吗?任何类型的线程或后台任务都可以处理此类视图问题,还是在后台执行此操作毫无意义,我应该考虑 RecyclerView
或其他一些解决方案?谢谢
can I use a new thread or background service to do this
不,你不能从后台线程中触及你的UI,否则会抛出异常
or it's pointless to do it in the background and I should consider recyclerview or some other solutions
没有看到您采用的方法的全部目的,因此很难给出任何答案,但如果您只需要可滚动的容器,RecyclerView
可能会伸出援手。此外,也许您需要显示的子视图的组合数量有限,您可以考虑准备组合布局,然后只扩充一个,而不是进行 10 个单独的扩充。其他方法是从代码创建您的子视图,但我将其保留为最后一个检查选项。
事实证明,处理我的问题的最佳方法是将 ListView 与 Adapeter 一起使用,或者更好(但也更难)的方法是使用 RecycleView。 无论如何,我通过使用 ListView
在我的列表中获得了相当不错的表现我可以通过 运行 AsynTask 中的膨胀视图或使用 Concurrent API 来做到这一点,因为我的 accordion/collapsing 列表列表不适合 RecyclerView ViewHolder以编程方式在 LinearLayout 中添加视图时,由于 UI 被阻止,模式跳帧过多
.在这里查看我的回答,它可能会给您一些想法