2013-11-27 49 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非常適合這種情況。