与单身人士合作(上下文问题)

时间:2017-11-01 16:45:48

标签: android

我正在将iOS项目移植到Android。 iOS项目利用几个关键单例为应用程序提供全局资源,例如数据库和一组Web服务。其中许多单身人士使用文件,网络或共享偏好等资源。

我在尝试将此移植到Android时遇到了很多问题,因为在编写不属于Activity的单例代码时,我经常需要“Context”对象。当我第一次构造单例时,我通常可以传入一个Context,但我听说我不应该将它存储为成员变量,因为它可能会导致内存泄漏。

处理这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

  

当我第一次构造单例时,我通常可以传入一个Context,但我听说我不应该将它存储为成员变量,因为它可能导致内存泄漏。

使用来自ApplicationgetApplication())或Activity(在任何其他getApplicationContext()上)的Context对象。这本身就是一个单身人士,所以它是预先泄露的,不能再被泄露。

请注意,尽管Application对象不适用于与UI紧密相关的任何内容Context(例如,夸大布局);这样的事情一般不应该是单身人士。

有关详细信息,请参阅Dave Smith's epic blog post on the roles of different types of Context

答案 1 :(得分:1)

如果您必须在应用中保留单身人士,则可以将<add key="sqlConnectString" value="Data Source=db01\pd; Initial Catalog=PDB; Trusted_Connection=Yes;"/> <add key="sqlConnectString" value="Data Source=db01\pd; Initial Catalog=PDB; Integrated Security=SSPI;"/> 传递给使用context的单身人士方法

在MySingleton.java中

context

从活动/服务调用

public class MySingleton {
   //private instance, private constructor and getInstance() goes here

   public void doSomething(Context context, int foo, int bar) {
       //Use context
   }
}

从碎片调用

MySingleton.getInstance().doSomething(this, 1, 2);

如果你能负担不断变化的建筑,请避开单身人士。您可以使用依赖注入作为替代方案。 This就是这样做的。