我正在开发一个自定义应用程序类的应用程序,该应用程序初始化几个单身人士,以便他们在所有应用程序工作时间内居住。我的应用程序中也有一些与这些单身人士合作的服务。是否有可能出现这样的情况:应用程序类将在android之前被单例实例销毁,因此服务将无法使用它们?或者应用程序总是为了上下文的服务而生活?找到摆脱这种情况的最佳途径是什么?服务运行时的应用程序类生命周期
谢谢。
我正在开发一个自定义应用程序类的应用程序,该应用程序初始化几个单身人士,以便他们在所有应用程序工作时间内居住。我的应用程序中也有一些与这些单身人士合作的服务。是否有可能出现这样的情况:应用程序类将在android之前被单例实例销毁,因此服务将无法使用它们?或者应用程序总是为了上下文的服务而生活?找到摆脱这种情况的最佳途径是什么?服务运行时的应用程序类生命周期
谢谢。
应用程序对象是任何Android应用程序的主要绝对起点。在任何Manifest声明项目(如Activity,Service和BroadcastReceiver)之前,它始终存在。所以放松,单身人士将在那里为你。
这是一个大讨论的话题,你可以google更多关于它所以接下来我就可以了个人意见。不管你的单例(数据库,位图缓存,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);
}
=>然后您的应用程序对象您只需初始化的单身
onCreate(){
MySingletonClass.init(getApplicationContext());
}
用这种方式,你会保持必要的初始化,执行Singleton模式,但访问你不要打电话到该对象类的应用程序中的对象。我知道这只是一个组织上的差异,但我相信这就是单独的好的和坏的代码。
因此,例如在您的服务上的电话是:MySingletonClass.get()
,不应该是MyApplication.mySingle
。
希望它有帮助。
从我的理解服务的生活不能没有应用context
,所以我想,如果应用程序也被杀死了Context
被杀害,所有组件都被杀害了铅,
Context
参考应用
,你可以在这里阅读更多的信息
http://developer.android.com/guide/components/fundamentals.html#proclife
是的,我现在有这样的代码。但有时我不知道为什么我的服务抛出NullPointerException,当我尝试在这里使用单例的字段例如.. – 2013-04-22 14:00:15
这就是为什么我包含'抛出新的RuntimeException'行。这样你就可以确定由于那个或其他原因而失败了。其他方法是绝对可以肯定的,即使GC杀死它,因为服务确实有上下文,你可以在'init()'中放一个代码if(instance == null)来只在需要时初始化并调用init从服务也。 – Budius 2013-04-22 14:05:36