簡體   English   中英

Java單例類不會在Android上調用其構造函數

[英]a Java singleton class does not call its constructor on Android

我正在使用在Android上運行的libGdx進行游戲。 我有一些與單例模式有關的情況。

在我的應用中,所有繪圖調用均由一個名為“ Spritepool”的類進行管理。 它在主線程上運行,進行紋理更新,排序,繪制...因此我將其設置為單例。

並且它幾乎可以正常工作..但是退出一次后重啟時,應用崩潰。

我認為這是因為當應用再次啟動時,單例類Spritepool不調用其構造函數...

將Spritepool更改為枚舉單例不是解決方案。 我的Spritepool類看起來像這樣。

public enum Spritepool {
    INSTANCE;

    BitmapFont debug = new BitmapFont();

    public static Spritepool get(){ return INSTANCE; }  
    Spritepool(){
        Gdx.app.log("sprite pool", "=== sprite pool constructor calling... ");
    }

    ...
    ...

    public void workingCodes(){...}
}

現在,我從構造函數Spritepool()中刪除了除日志外的所有初始化。 首次啟動應用程序時,構造函數的日志打印良好,成員“ debug”表示良好。 退出應用程序並重新啟動后,所有應用程序周期均正常工作,Spritepool()日志消失,成員“ debug”指向垃圾。(不是新的BitmapFont()。)

這是Android上常見的單例類的正常行為嗎? (我認為不是..也許我在某處做錯了..)我應該怎么做才能使它正確? 任何建議將被認真考慮。 謝謝。

為什么使用枚舉?

嘗試這個:

公共類Spritepool {private Spritepool INSTANCE;

BitmapFont debug = new BitmapFont();

public static Spritepool get(){ 
     if (INSTANCE == null) INSTANCE = new Spritepool();
     return INSTANCE; 
}  
Spritepool(){
    Gdx.app.log("sprite pool", "=== sprite pool constructor calling... ");
}

...
...

public void workingCodes(){...}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM