当前位置: 首页 > 面试题库 >

Android中的单例与应用程序上下文?

华景明
2023-03-14
问题内容

回顾这篇文章,列举了使用单例的几个问题, 并看到了使用单例模式的Android应用程序的几个示例,我想知道使用单例而不是通过全局应用程序状态共享的单个实例(将android.os.Application子类化并获取它)是否是一个好主意。通过context.getApplication())。

两种机制都有哪些优点/缺点?

老实说,我希望在此后的Singleton模式与Web应用程序中得到相同的答案,这不是一个好主意!但适用于Android。我对么?否则DalvikVM有什么不同?

编辑:我想对涉及的几个方面有意见:

  • 同步化
  • 可重用性
  • 测试中

问题答案:

我非常不同意Dianne Hackborn的回应。我们会逐步从项目中删除所有单例,以支持轻量级的,任务范围内的对象,可以在你实际需要它们时轻松地重新创建它们。

单例是测试的噩梦,如果延迟初始化,将引入“状态不确定性”,并带有微妙的副作用(当将调用getInstance()从一个作用域移到另一个作用域时可能会突然浮出水面)。已经提到了可见性是另一个问题,并且由于单例意味着对共享状态的“全局”(=随机)访问,因此当在并发应用程序中未正确同步时,可能会出现细微的错误。

我认为这是一种反模式,这是一种糟糕的面向对象风格,从本质上讲相当于维持全局状态。

回到你的问题:

尽管应用程序上下文本身可以视为单例,但它是框架管理的,并且具有明确定义的生命周期,范围和访问路径。因此,我认为,如果你确实需要管理应用程序全局状态,则应该在这里,无处可去。对于其他任何事情,请重新考虑是否确实需要单例对象,或者是否有可能重写你的单例类以实例化执行手头任务的小型短期对象。



 类似资料:
  • 问题内容: 我有一个facebook初始化sdk调用,启动应用程序时需要它来初始化: 我想使用我的Application类来做到这一点。例如: 我的主要活动是使用Facebook登录按钮: 我怎么称呼我的申请单身人士?我如何使其onCreate()工作? 问题答案: 要使您的App类遵循 Singleton设计模式 : 然后在其他任何类中使用它: 如果这是您要的..

  • 我多年来一直在使用Spring MVC,我试图理解与Spring Boot的一些关键区别。 你能帮我确认一下吗?或者让我明白我在这里遗漏了什么?

  • 问题内容: 在我的android项目中,我有ImageAdapter类,可以在其中传递应用上下文以满足进一步的需求。 问题是我想使ImageAdapter作为一个单例对象,以便从我的所有活动中轻松访问此类的实例。但是我不知道如何将我的活动之一中的getApplicationContext()方法中的应用程序上下文传递给ImageAdapter。那么,有什么“魔术”可以做到以下几点? 也许您还有其他

  • 我必须使用网格在Android中实现照片浏览器。所以,我想知道GridView和GridLayout之间的区别。 所以我会选择正确的一个。 目前我正在使用GridView动态显示图像。

  • 有人能解释这两个SpringBean作用域之间的区别吗?我熟悉单例模式。 这是唯一的区别吗?使用application scope,您可以在Spring容器中拥有一个beans列表。 此外,您是否能够在一个Spring容器中运行多个Web服务器?如果是,那将是使用应用程序范围而不是单例范围的原因,因为否则bean将在两个服务器上共享。

  • 本文向大家介绍Android中的Handler与多线程应用实例,包括了Android中的Handler与多线程应用实例的使用技巧和注意事项,需要的朋友参考一下 本文首先解释一下handler是用来干嘛的,然后通过例子介绍其在多线程中的应用。 什么是Handler handler通俗一点讲就是用来在各个进程之间发送数据的处理对象。在任何进程中,只要获得了另一个进程的handler则可以通过handl