应用程序对象是任何 Android 应用程序的主要绝对起点。它始终存在于任何 Manifest 声明的项目(如 Activity、Service 和 BroadcastReceiver)之前。所以放松一下,单身人士会在你身边。
这是一个很大的讨论话题,你可以谷歌更多关于它的内容,以下是我个人对此的看法。无论您的单例(数据库、位图缓存、FileUtils)的原因是什么,我认为在应用程序的第一个入口点(即应用程序)初始化它们是可以且正确的。但是应用程序本身并不是用来携带或容纳这些对象的对象,我建议的设计方法是:
=> 在您的单例对象/类上,您必须:
private static MySingletonClass instance; // reference to the single object
private MySingletonClass(Context c){ // private constructor to avoid construction from anywhere else
// let's say it needs the context for construction because it's a database singleton
}
public static MySingletonClass get(){ //
if(instance == null) throw new RuntimeException("This singleton must be initialised before anything else");
return instance;
}
public static void init(Context c){ // call the initialisation from the Application
instance = new MySingletonClass(c);
}
=> 然后在您的 Application 对象上,您只需初始化单例
onCreate(){
MySingletonClass.init(getApplicationContext());
}
通过这种方式,您将保持必要的初始化,强制执行单例模式,但访问您调用的对象类而不是应用程序。我知道这只是组织上的差异,但我相信这就是区分好代码和坏代码的原因。
因此,例如在您的服务上,调用是:MySingletonClass.get()
并且永远不应该是MyApplication.mySingle
.
希望能帮助到你。