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

标签 android service lifecycle

我正在开发一个带有自定义 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/

相关文章:

Android 嵌入式 HTML5 视频

android 服务需要在一段时间后停止

php - Zend Framework 2 - 如何对自己的 session 服务进行单元测试?

reactjs - 如何在React生命周期中的渲染函数之前访问新的props.value

ios - awakeFromNib vs Outlets - 当我们调用 awakeFromNib 时设置 outlets 和 segues

android - 使用 Espresso 测试可绘制更改

android - 如果没有更新 Google Play 服务,如何处理 Google API 客户端

java - “FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager)”已弃用

java - 蓝牙扫描仪在屏幕关闭时停止扫描或减少扫描频率

Android,项目和 Activity 生命周期中的 Activity 数量不受限制!