首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android程序每6-8秒冻结/故障半秒钟。

android程序每6-8秒冻结/故障半秒钟。
EN

Stack Overflow用户
提问于 2015-01-09 05:52:11
回答 1查看 274关注 0票数 0

我对Android和Java相当陌生,我正在进行我的第一款游戏。

这场比赛似乎每6-8秒暂时停止一次,持续大约半秒钟。我正在做一个平台游戏,时间是一切,所以小故障使游戏不可玩。

这是一个已知的垃圾收集问题,还是一些背景任务?我尝试过引导到安全模式,并使用不同的手机,但做同样的事情。

加载雪碧:

代码语言:javascript
运行
复制
public void load() {
    mysprite = new Sprite(this);
    mysprite_image = new Texture(this);
    if (!mysprite_image.loadFromAsset("mysprite_sprite_sheet.png")) {
        fatalError("Error loading sprite_sheet");
    }
    mysprite.setTexture(mysprite_image);
}

我的测试程序的主循环就是这样做的:

代码语言:javascript
运行
复制
public void draw() {
    canvas = getCanvas();

    canvas.drawColor(Color.BLACK);

    for (int i=0; i<20; i++) {
        if (x[i] + vx[i] <= 0 || x[i] + vx[i] + 60 >= screenWidth) vx[i] *= -1;
        if (y[i] + vy[i] <= 0 || y[i] + vy[i] + 60 >= screenHeight) vy[i] *= -1;
        x[i] += vx[i];
        y[i] += vy[i];

        mysprite.position = new Point(x[i], y[i]);
        drawSheetFrame(mysprite, 20, 29, 1, myspriteFrame, 4);
    }
}

draw()在锁定和解锁画布之间被调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-09 06:22:47

正如您已经知道的那样,在onDraw()方法中执行新对象是一种糟糕的行为,在这段代码中,您甚至在循环中调用新对象!所以GC会时不时地把你拖慢。

为了避免这种情况,您可以在onDraw()方法的外面创建一个“点轮询”,并在需要时创建/缓存实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27854614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档