现在我需要的所有工具(DatabaseHelper单例,ImageLoader单例,PhotoHandler,自定义Toast Maker)都在我的所有活动扩展的onCreate中初始化,但我刚才意识到每一个新活动开始的时间,这些都会重新实现。
这是一个问题吗?
我是否应该更改为创建扩展Application的类并在其中包含这些变量? 如果是这样,我应该将那个Application类的哪个方法实例化?
为了使图片完整,我还有一个公共静态终结类,它包含各种常量,如错误消息和应用程序首选项
我有一个在用户登录后立即执行的InitialDataLoader类,它从服务器获取用户需要的所有内容并将其存储在本地。
那么哪个应该是我更适合实例化上述工具的地方?
以下是我的所有活动扩展的活动的一部分:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbTools = DBTools.getInstance(this);
// Create global configuration and initialize ImageLoader with this configuration
// https://github.com/nostra13/Android-Universal-Image-Loader
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(getApplicationContext()).build();
imageLoader = ImageLoader.getInstance();
imageLoader.init(imageLoaderConfiguration);
// Set global bitmap preferences
bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inDither = false;
bitmapOptions.inPurgeable = true;
bitmapOptions.inInputShareable = true;
bitmapOptions.inTempStorage = new byte[16 * 1024];
// Get an instance of the current user
instanceOfTheCurrentUser = Transporter.instance().instanceOfTheCurrentUser;
答案 0 :(得分:2)
我会使用getInstance(Context context)
方法使用懒惰的初始化单例(请记住在此方法中仅使用context.getApplicationContext(),否则您将泄漏Activity / Service实例)。对象的生命周期与Application对象的生命周期相同,但您不必对应用程序类进行Context
的强制转换:
public class ImageLoader {
private ImageLoader(Context context) {
}
private static final ImageLoader sInstance;
public synchronized static ImageLoader getInstance(Context context) {
if (sInstance == null) {
sInstance = new ImageLoader(context.getApplicationContext());
}
return sInstance;
}
}
答案 1 :(得分:1)
我认为如果你把它们作为静态类会很好..
你可以为每个类创建一个初始化方法(作为构造函数的替换;如果你需要它); 并且当类之前已经初始化时,创建一个标志(例如一个布尔值)..所以即使你多次调用初始化函数(假设每次启动一个活动),它都会没问题。
希望它有所帮助..