后台线程中的android addView

标签 android views ui-thread background-thread

我需要在一个循环中添加很多 View ,而这个 fragment 就是这样做的,应用程序还将有一个抽屉导航和操作栏,用户可以在其中执行操作。

所以我希望这个过程不会 a) 通过阻止用户来减慢应用程序,b) 最好在后台线程中添加 View 。

问题是我认为 android 不喜欢在非 UI 线程中添加 View ,那么对此有最佳实践吗?我计划在 fragment 的 View 中显示一个进度条 View 对象,同时使用 addView 和相关计算生成其余 View

最佳答案

您可以通过在 UI 线程上发布多个 Runnables 来分配工作,而不是在后台线程上添加 View 。下面的代码是该技术的高度简化版本,但它类似于在 Android 的 Launcher 应用程序中完成的方式:

private void createAndAddViews(int count) {
    for (int i = 0; i < count; i++) {
         // create new views and add them
    }
}

Runnable r = new Runnable() {
    public void run() {
        createAndAddViews(4); // add 4 views
        if (mMoreViewsToAdd) mTopLevelView.post(this);
    }
};

mTopLevelView.post(r);

关于后台线程中的android addView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013960/

相关文章:

wpf - 如何使某些任务更改我的WPF控件

java -/res/layout/main.xml描述的是一个View还是一个ViewGroup?

Android Gradle 合并字符串资源

video - YouTube视频分析:观看次数计数器

ios - RestKit、核心数据、魔法记录、大量数据和滞后的 UI

JavaFX 避免在使用混合 UI 而不是 UI 元素的长时间运行操作期间锁定 UI

java - 如何在 Android Studio 中使用 com.google.android.collect.list

android - 有没有办法让 <paper-toolbar> 使用 Polymer Starter Kit 占据屏幕的整个宽度?

php - 当在另一个方法中返回 View 时,Laravel 返回空白页

asp.net-mvc - ASP.NET MVC View 中允许多少逻辑?