Android资源管理
我是程序员初学者(或多或少),我想知道在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();
}
}
这可能听起来像一个愚蠢的问题,但我问主要是因为我从来没有看到从别人这样的事情。我只看到来回传递的资源,或者他们被加载到需要使用的地方。你怎么看?最佳做法是什么?
为了实现这个最好的方式,将使用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();
}
}
}
我会在调用'unload()'之前检查资源是否为空。 – Manu 2014-10-01 08:56:14
@Manu我会做同样的,谢谢。 – CodeWarrior 2014-10-01 09:03:18
在java中,一般而言,您的方法看起来不错,尽管很多取决于您使用的程序和资源的类型。
在android中,我不相信你的方法。原因是在android资源中已经被分隔到资源目录中。和资源初始化有很大的不同。此外,活动的流程会使这种方法难以使用。
我会建议使用singleton和accessor方法来代替'public static'。这将使资源管理变得更加简单和安全。 – 2014-10-01 08:29:06
不错的建议。这将确保它更安全(我不认为它会更容易)。 – caution2toxic 2014-10-01 08:38:04
使用访问器方法,您可以施加一些内部不变量和检查。此外,嘲笑这个类测试也会更容易。 – 2014-10-01 09:20:36