2014-10-01 285 views
1

我是程序員初學者(或多或少),我想知道在Android或java中加載資源(bmps,mp3等等)的最佳方式是什麼。我的意思是我創建了一個可以容納我的資源的其他靜態類的類(所以當我使用它們時,我不需要傳遞參數,資源可以輕鬆加載並輕鬆卸載)。像這樣的東西。Android資源管理

public class ResourcesHandler { 
    public static Context mContext; 
    public static GraphicsCollection mGraphics; 
    public static SoundFxPlayer mSoundFx; 
    public static MusicPlayer mMusic; 
    public static void unload() { 
     mContext=null; 
     mGraphics.unload(); 
     mSoundFx.unload(); 
     mMusic.unload(); 
    } 
} 

這可能聽起來像一個愚蠢的問題,但我問主要是因爲我從來沒有看到從別人這樣的事情。我只看到來回傳遞的資源,或者他們被加載到需要使用的地方。你怎麼看?最佳做法是什麼?

+0

我會建議使用singleton和accessor方法來代替'public static'。這將使資源管理變得更加簡單和安全。 – 2014-10-01 08:29:06

+0

不錯的建議。這將確保它更安全(我不認爲它會更容易)。 – caution2toxic 2014-10-01 08:38:04

+0

使用訪問器方法,您可以施加一些內部不變量和檢查。此外,嘲笑這個類測試也會更容易。 – 2014-10-01 09:20:36

回答

2

爲了實現這個最好的方式,將使用Singleton模式,因爲您在整個應用程序生命週期中都需要您的資源。創建一個單例類如下:

靜態成員:它包含單例類的實例。

私有構造函數:這會阻止其他人實例化Singleton類。

靜態公共方法:這提供了訪問Singleton對象的全局點並將實例返回給客戶端調用類。

如果在您的情況下存在多線程環境,也照顧。

public class ResourcesHandler { 
    private static ResourcesHandler handlerObj; 
    private Context mContext; 
    private GraphicsCollection mGraphics; 
    private SoundFxPlayer mSoundFx; 
    private MusicPlayer mMusic; 

    private ResourcesHandler(){ 
     //TODO 
    } 

    public static ResourcesHandler getInstance() { 
     if (handlerObj == null){ 
      handlerObj = new ResourcesHandler(); 
     } 
     return handlerObj; 
    } 

    public void unload(){ 
     mContext=null; 
     if(null != mGraphics){ 
      mGraphics.unload(); 
     } 
     if(null != mSoundFx){ 
      mSoundFx.unload(); 
     } 
     if(null != mMusic){ 
      mMusic.unload(); 
     }       
    } 
} 
+0

我會在調用'unload()'之前檢查資源是否爲空。 – Manu 2014-10-01 08:56:14

+0

@Manu我會做同樣的,謝謝。 – CodeWarrior 2014-10-01 09:03:18

0

在java中,一般而言,您的方法看起來不錯,儘管很多取決於您使用的程序和資源的類型。

在android中,我不相信你的方法。原因是在android資源中已經被分隔到資源目錄中。和資源初始化有很大的不同。此外,活動的流程會使這種方法難以使用。