删除元素时Android LinkedList滞后

时间:2012-11-08 09:56:25

标签: android arrays list lag

我真的需要帮助。我正在使用游戏并遇到一个问题,每当元素从我的列表中删除对象时它就会滞后。我已经搜索了解决方案并发现了使用迭代器来减少延迟,但是,它仍然滞后。我已经使用了ArrayList和LinkedList,但它们最终都得到了相同的结果。

这是我用于列表的代码示例:

初​​始化:

private LinkedList<Background> bg = new LinkedList<Background>();

渲染:

for (Iterator<Background> iterator = bg.iterator(); iterator.hasNext();) {
            Background back = iterator.next();
            if (back.getX()-(-width-1) > 0) {
                if ((back.getX() < width) || (back.getX()+width > 0)) {
                    back.draw(canvas);
                } else {
                    iterator.remove();
                }
            }
        }

这是对象类中的draw函数,其中back.draw(canvas);正在致电:

    public void draw(Canvas canvas) {
    // where to draw the sprite
    Rect destRect = new Rect(getX(), getY(), getX() + spriteWidth, getY() + spriteHeight);
    canvas.drawBitmap(bitmap, sourceRect, destRect, null);
    //canvas.drawBitmap(bitmap, 20, 150, null);
    //Paint paint = new Paint();
    //paint.setARGB(50, 0, 255, 0);
    //canvas.drawRect(20 + (currentFrame * destRect.width()), 150, 20 + (currentFrame * destRect.width()) + destRect.width(), 150 + destRect.height(),  paint);
}

也许在MainThread中需要更改一些处理FPS的东西?或者还有其他解决方案吗?我听说过套装,但似乎找不到任何好的例子试试看。

需要指出的是我使用的是Canvas,而不是OpenGL。 需要指出的是,上述数组中的每个元素的图像大小为800x480。我试图降低图像的质量,但它没有太大的区别。

谢谢。

2 个答案:

答案 0 :(得分:1)

它可能与您在绘制时所做的计算量有关。我确信它与您使用的集合无关。

答案 1 :(得分:0)

根据您发布的代码,我会说删除项目的LinkedListIterator肯定是最快的。但是你还必须考虑列表的其他用法。