2014-05-25 48 views
3

问题:是否需要保存单身人士?

我节省了一些数据,一个单独的类...有时会发生,那这单返回null数据,从中我得出,它被摧毁...

我的想法/想法:

其实,我认为,单身会生活,只要应用程序生命,只要程序记住别的样片段状态。例如,我的单身会存在与它的最后一个数据太。这不正确吗?

具体问题:

我的情况如下:我是从我的主要片段去子片段和保存选定的对象在我单身......我停止使用我的应用程序,并在一段时间后回来。我的应用程序记得它是状态并重新创建片段,我的片段想要从我的单例中获取选定的对象并获得null值。

我认为,只要应用程序存在,就应该存在一个singleton,因此不需要保存...每当应用程序结束时,无论如何都不会恢复任何内容,并且我的应用程序将不会记住任何内容,因此无论如何也没关系。这是一个错误的假设?

我需要回答这个问题,因为如果我敢肯定,那上面的想法是正确的,我至少知道,我有搜索的问题在其他地方...

+0

它的应用程序存在,那么请尝试使用'共享Preferences' – Siva

+0

我知道如何persistantly保存数据,但我不希望永久保存数据..实际上,我只需要回答我的想法......如果单个类存在,只要应用程序存在,并且在应用程序被销毁后,所有碎片状态和其他保存的数据都将消失,应用程序将干净地启动下一次... – prom85

+2

@ prom85:只要有东西持有对它的引用,就会存在一个单例。之后,可以自由收集垃圾。 – Squonk

回答

6

这里是一个短summury什么我发现了(或者已经忘了)

  • Activitys可以重现,尽管应用程序被破坏
  • 单身人士可以被垃圾收集如果不从某处
01 referenzed

所以你必须节省你的单身!否则,每当你的手机在低内存,它可能会杀死应用程序,并创建一个新的应用程序,但重新执行活动...

对我来说,因为我实际上总是使用单个活动与片段,它是容易解决的问题:

  • 当我创建一个活动,我称之为静态恢复功能(在致电获取!)
  • 在活动中的一个的onSaveInstanceState单身始终保存到束

=>所以我的单身长相就像如果你需要存储的东西以下(基础结构)

public class DataCache implements Parcelable 
{ 
    private static final String TAG = DataCache.class.getName(); 
    private static DataCache mCache = null; 

    public static synchronized final DataCache get() 
    { 
     if (mCache == null) 
      mCache = new DataCache(); 
     return mCache; 
    } 

    private DataCache() 
    { 
     // init... 
    } 

    public void save(Bundle outState) 
    { 
     outState.putParcelable(TAG, this); 
    } 

    public static void restore(Bundle savedInstanceState) 
    { 
     if (savedInstanceState != null && savedInstanceState.containsKey(TAG)) 
     { 
      // only restore, if necessary, i.e. if application was destroyed but activity saved our last cache 
      if (mCache == null) 
       mCache = savedInstanceState.getParcelable(TAG); 
     } 
    } 
}