gpt4 book ai didi

android - 服务运行时的应用程序类生命周期

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:36 26 4
gpt4 key购买 nike

我正在开发一个带有自定义 Application 类的应用程序,它初始化了几个单例,以便它们在所有应用程序工作时间内都存在。我的应用程序中还有一些服务可与这些单例一起使用。应用程序类是否会在服务之前被带有单例实例的 android 破坏,这样服务将无法使用它们?还是应用程序始终存在,即使它的上下文服务也是如此?找到摆脱这种情况的最佳方法是什么?

谢谢。

最佳答案

  • 关于申请对象:

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

希望对您有所帮助。

关于android - 服务运行时的应用程序类生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com