android addView在后台线程中

时间:2013-09-25 19:49:54

标签: android views ui-thread background-thread

我需要在循环中添加大量视图,而这个片段可以做到这一点,应用程序还将有一个导航抽屉和操作栏,用户可以在其中执行操作。

所以我希望这个过程不会a)通过阻止用户来减慢app的速度,b)最好在后台线程中添加视图。

困境在于我认为android不喜欢在非UI线程中添加视图,所以有最佳实践吗?我计划在片段视图中显示进度条视图对象,而其余视图是使用addView和相关计算生成的

1 个答案:

答案 0 :(得分:18)

您可以通过在UI线程上发布多个Runnables来分配工作,而不是在后台线程上添加视图。下面的代码是该技术的高度简化版本,但它类似于在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);