13

I am developing an application with custom Application class which initializes a couple of singletons so they live during all application working time. I also have a couple of services in my application which work with these singletons. Is it possible situation that Application class will be destroyed by android with singletons' instances before services so services will not be able to use them? Or application lives always even for services of it's context? What is the best way to find a way out of this situation?

Thanks.

4

2 回答 2

9
  • 关于申请对象:

应用程序对象是任何 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.

希望能帮助到你。

于 2013-04-22T11:12:59.243 回答
4

根据我的理解,服务不能没有应用程序context,服务与Context引用绑定到应用程序,所以我认为如果应用程序被杀死也Context被杀死并且导致所有组件都被杀死,

你可以在这里阅读更多信息

http://developer.android.com/guide/components/fundamentals.html#proclife

于 2013-04-22T11:02:22.253 回答