2014-10-01 139 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资源中已经被分隔到资源目录中。和资源初始化有很大的不同。此外,活动的流程会使这种方法难以使用。