如何在Android中正确转储ArrayList / RAW绘制的图像内存?

时间:2014-11-24 14:54:18

标签: java android memory-management

我(仍在)正在开发一款游戏,当它接近完成时,会出现新的问题。所以这是短篇小说: 在修复了一些错误并实现新功能后,我可能 - 或许可能没有,遇到过一个小小的内存'问题。每个级别都有一定的时间,玩家必须解决它。当这个时间用完时,级别会重新加载。在重新加载之后,无论是在未能及时解决水平还是在完成水平之后,游戏逐渐开始减速。我的计时器每秒都会滴答,该级别以相同的速度重新加载,但是当在X重新加载后移动对象时,它们移动得更缓慢/迟缓,就好像跳帧一样。 我查看了我的ArrayLists,他们整齐地(争论不休)清空,我的计时器重置了。以下是我使用的一些(相关)代码:

我的更新计时器中的OnTick()

MoveObjects()移动所有对象,updateDraw()更新屏幕。此定时器具有15x1000ms定时器,定时速度为250ms

    public void onTick(long millisUntilFinished) {
        if(!loadingNewLevel)
            MoveObjects();

        updateDraw();
    }

prepareNewLevel

此函数为新级别准备所有必需的变量。它在电平复位和电平完成时调用

public void prepareNewLevel(){      
    level.clear();
    movables.clear();
    totalSolved = 0;
    solvable = 0;
    levelWidth = 0;
    levelHeight = 0;
    allCollided = false;
}

updateDraw();刷新屏幕

public void updateDraw(){   
    RelativeLayout rl = (RelativeLayout)findViewById(R.id.game);
    rl.removeAllViewsInLayout();
    //Level
    for(GameObject go : level){
        ImageRAW(go.spriteID, R.id.game, go.position.x, go.position.y);
    }
    for(GameObject go : movables){
        ImageRAW(go.spriteID, R.id.game, go.position.x, go.position.y);
    }

    //Timer
    if(remaining_time >= 10000)
        TextViewRAW(TIMER_ID, R.id.game, 32, 32, "00:"+String.valueOf(remaining_time/1000)+"   Level "+String.valueOf(currLevel+1), 18, 0);
    else
        TextViewRAW(TIMER_ID, R.id.game, 32, 32, "00:0"+String.valueOf(remaining_time/1000)+"   Level "+String.valueOf(currLevel+1), 18, 0);
}

现在,我发布的后一段代码就是为什么我猜测我的内存管理有问题,因为我直接从我的RAW文件夹画到屏幕上。如果是这种情况,如何处理直接绘制的RAW文件的内存?

我还会让您访问一些相关的Java文件: https://www.dropbox.com/s/kqu7sfi8qnlt9w6/Game.java?dl=0 https://www.dropbox.com/s/9ofpg1xj4anlvi0/UtilLib.java?dl=0

这些文件中的后一个包含我在整个项目中使用的功能,例如早期提到的 ImageRAW() 功能。

-Zubaja

0 个答案:

没有答案