单身人士得到回收

时间:2012-10-06 16:42:39

标签: java android singleton

我在Android中有一个用于从xml加载数据的单例。它不时被回收,我不明白为什么。根据我的知识,单身人士应该在应用程序过程的生命周期中存在这是我的单身人士:

public class DataLib {

    public static CategoryList categories = new CategoryList();
    public static RegionList regions = new RegionList();
    public static CompanyTypeList types = new CompanyTypeList();
    public static SearchData searchData = new SearchData();
    public static CompaniesList companies = new CompaniesList();

    private static RegionData currentRegion;

    private static final DataLib INSTANCE = new DataLib();

    protected DataLib() {
    }

    public static DataLib getInstance() {
        return INSTANCE;
    }

    public static void loadData() {
        loadCategories();
        loadRegions();
        loadTypes();
    }

    /* ... some more static functions are here ...*/
}

正如您所看到的,它不是由任何活动直接实例化,而是由流程本身实例化。当应用程序启动时,通过调用DataLib.loadData()来加载数据=活动,该活动将在加载数据时结束。

我无法确定是什么触发了回收 - 有时应用程序需要在后台停留更长时间,有时它会在几分钟内完成。我正在记录DataLib类的指针,所以我可以告诉它真正改变了=被回收。

有什么想法吗?感谢。

编辑:答案部分在标记答案+评论中。

1 个答案:

答案 0 :(得分:3)

  

它不时被回收,我不明白为什么。

Android将“不时”终止您的流程。

  

有时app需要在后台停留更长时间,有时候需要几分钟

操作系统和用户可以随时摆脱您的过程。单例和其他静态数据成员需要是持久数据的缓存,使用后台线程等加载数据。

如果您在后台进行了特定的工作,那么您应该使用Service来向操作系统表明您在后台工作,而不依赖于任何活动。这并不妨碍Android终止您的进程(例如,在用户请求时),但它会使自己终止进程的可能性降低一点(即操作系统倾向于选择其他进程)。