由彩色小方块组成的大网格导致高 CPU 使用率

Big grid of tiny colored squares causes high CPU usage

我有一个方法可以创建一个由彩色小方块组成的大网格,我注意到这对 CPU 使用有很大影响。

请注意,此方法仅被调用一次,即使该方法已完成,问题仍然存在且永远不会结束。如果不执行此方法,cpu 使用率仍然很低。

// regionLayout is a vertical LinearLayout
// gridHorizontalSize and gridVerticalSize determines the size of the grid

regionLayout.removeAllViews();
regionLayout.setWeightSum(gridVerticalSize);

ImageView cell = null;
LinearLayout row;
int color;

for(int i=0; i<gridVerticalSize; i++) {

    row = new LinearLayout(context);
    row.setWeightSum(gridHorizontalSize);
    regionLayout.addView(row, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f));

    for(int j=0; j<gridHorizontalSize; j++) {

        cell = new ImageView(context);

        color = /* color is chosen somehow */

        cell.setBackgroundColor(color);

        row.addView(cell, new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1f));
    }
}

我使用了两个 LinearLayout 来制作网格,因为我不熟悉 GridLayout,也不知道如何为水平和垂直尺寸设置 weightSum。 我没有特别的原因使用 ImageViews,我只是需要一些可以设置颜色的东西。

网格通常是 30x30 左右的方块,所以有 900 个彩色小方块,我知道很多,但没办法,我需要同时在屏幕上显示 900 个。

我可以改变什么来改善?谢谢

您应该使用自定义视图,而不是嵌套的线性布局。您已经在一个屏幕上创建了 900 个视图对象。这是一个巨大的性能损失。

我有一个网格板视图,是我为一个项目制作的,您可以参考一下 https://github.com/shmuelr/ConwaysGame/blob/master/app/src/main/java/com/shmuelrosansky/conwaysgame/views/Board.java