Java 添加到布局时,多个重复视图会导致延迟

Java 添加到布局时,多个重复视图会导致延迟,java,android,xml,performance,view,Java,Android,Xml,Performance,View,我正在创建一个太空游戏,我正在创建一个随机组合的星星小白圈作为背景的一部分。形状是用XML创建的,视图是用Java编程创建的。恒星本质上都是相同的,减去一个随机的大小和位置。如果我将循环更改为仅创建70个或更低的视图,那么整个应用程序在三星Note 2上运行良好,没有任何减速。理想情况下,我希望在整个应用程序中创建几百颗星,没有延迟 stars.java public void setup() { RelativeLayout fullLayout = (RelativeLayout)a

我正在创建一个太空游戏,我正在创建一个随机组合的星星小白圈作为背景的一部分。形状是用XML创建的,视图是用Java编程创建的。恒星本质上都是相同的,减去一个随机的大小和位置。如果我将循环更改为仅创建70个或更低的视图,那么整个应用程序在三星Note 2上运行良好,没有任何减速。理想情况下,我希望在整个应用程序中创建几百颗星,没有延迟

stars.java

public void setup() {
    RelativeLayout fullLayout = (RelativeLayout)activity.findViewById(R.id.fullLayout);

    //Creates a new "star" and adds it to my main layout as part of the background
    for(int i = 0; i < 750; i++){
        Random r = new Random();

        int width = r.nextInt(1000);//Using the dynamic screen size but for demonstration I changed the width & height to a hard coded integer.
        int height = r.nextInt(500);
        int starSize = r.nextInt(5) + 3;

        View star = new View(activity);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(starSize, starSize);
        star.setBackgroundResource(R.drawable.star);
        star.setLayoutParams(params);
        star.setX(width);
        star.setY(height);

        fullLayout.addView(star);
    }
}
star.xml

<?xml version="1.0" encoding="utf-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">

    <!-- view background color -->
    <solid
        android:color="#FFFFFF" >
    </solid>

    <!-- view border color and width -->
    <stroke
        android:width="2dp"
        android:color="#88FFFFFF" >
    </stroke>

    <!-- Here is the corner radius -->
    <corners
        android:radius="90dp"   >
    </corners>
</shape>

如果你创建了大量的小部件/视图,那么Android会变得非常慢,因为它必须尝试并计算每个小部件/视图应该在哪里,然后它还必须单独绘制每个小部件/视图

对于这种情况,您应该创建一个自定义视图,然后一次性绘制所有星星

有关如何执行此操作的更多信息,请参见此处: