2013-11-27 41 views
0

目前正在制作一个简单的Android SurfaceView基础游戏。有很多电话是这样的:for performace,static class or regular object creation

mSplatGraphic[idx] = new Random().nextInt(SPLAT_COUNT); 

我的问题是,这将是更好的性能明智的,有一个“静态随机班”是这样的:

public class SysRandom { 

    private static final Random RANDOM = new Random(); 

    public static int nextInt(int limit) { 
     return RANDOM.nextInt(limit); 
    } 
} 

,并使用此代码来代替:

mSplatGraphic[idx] = SysRandom.nextInt(SPLAT_COUNT); 

我的想法是,用简单的类,创建Random对象一次,并没有被不断创建和销毁,但我不知道那是什么是真正发生一次的代码是补偿失败并正在运行。

这可能是java noob问题,对不起!我自学成才,很高兴删除这个问题,如果有人只是指向我的链接:]

+1

而不是每次创建一个新的随机,为什么不有一个类字段? – panini

+0

@panini啊,是的。这会起作用,甚至比创建课堂更好。 – Tigger

回答

0

就我个人而言,我不会使用您建议的选项。首先,每次你需要一个随机数时,不需要创建一个新的随机数。这将导致大量不必要的垃圾回收,这会对fps产生负面影响。使用你的SysRandom包装应该有所帮助,但我不认为将它包装在该实用程序类中是必要的。就个人而言,我会在你的类使用mSplatGraphic顶部声明

private final Random rand = new Random()

。除非静态访问rand,否则我不会将其设置为静态。

0

是的,它会更快,尤其是如果此代码放置在循环中,因为该对象将被创建,并且那么垃圾收集器将不得不立即收集它。将它放在自己的班级中可以提高性能,但不是数量巨大。 Android文档has a page非常适合这种情况。