Android Singleton和内存问题

时间:2013-11-24 22:51:27

标签: android memory singleton

我在Android应用中遇到单身人士问题。我已经阅读了Stackoverflow中有关此问题的所有帖子,但我对此感到困惑。

我有一个单例来表示与其他系统的接口。它的结构是这样的:

public class Ifc
{
    private static Ifc sharedIfc;
    private String attrib;

    public static Ifc getInstance()
    {
        if (sharedIfc == null)
        {
            sharedIfc = new Ifc();
            sharedIfc.attrib = "";
        }
        return sharedIfc;
     }

     public boolean isMyAttrib(String myAttrib)
     {
         if(this.attrib.matches(myAttrib)) 
             return true;
         else
             return false;
     }
}

我以这种方式访问​​这个单身人士:

myIfcInstance = Ifc.getInstance();
boolean _isMyAttrib = myIfcInstance.isMyAttrib("example");

我的问题是此代码无法在内存不足的设备中正常运行。在这些设备中,应用程序经常在“if(this.attrib.matches(myAttrib))”行中崩溃,并在attrib中出现NullPointer错误。

我知道在低内存情况下可能会从内存中删除静态数据,但是该类可能不为null但其属性为null?

避免这种情况的最佳方法是什么?也许是这样的?我觉得很糟糕,但它可以奏效:

    public static Ifc getInstance()
    {
        if (sharedIfc == null)
        {
            sharedIfc = new Ifc();
            sharedIfc.attrib = "";
        }
        if(shared.attrib == null) shared.attrib = "";
        return sharedIfc;
     }

非常感谢!

1 个答案:

答案 0 :(得分:0)

只有一种方法可以确保Android API在创建扩展应用程序的类的应用程序的生命周期内保持数据。 http://developer.android.com/reference/android/app/Application.html

为了完全透明,我已经看到安卓工程师推荐我们的单例,但是这种方法对我来说对于应用程序关键数据和对象来说总是很完美。

创建扩展应用程序的类后,您可以从应用程序的任何部分获取引用,如下所示

myClass app = (myClass)getApplication();

在“myClass”类中,您可以使用与上面的单例实现相同的方法。

希望这有帮助。