我在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类的指针,所以我可以告诉它真正改变了=被回收。
有什么想法吗?感谢。
编辑:答案部分在标记答案+评论中。
答案 0 :(得分:3)
它不时被回收,我不明白为什么。
Android将“不时”终止您的流程。
有时app需要在后台停留更长时间,有时候需要几分钟
操作系统和用户可以随时摆脱您的过程。单例和其他静态数据成员需要是持久数据的缓存,使用后台线程等加载数据。
如果您在后台进行了特定的工作,那么您应该使用Service
来向操作系统表明您在后台工作,而不依赖于任何活动。这并不妨碍Android终止您的进程(例如,在用户请求时),但它会使自己终止进程的可能性降低一点(即操作系统倾向于选择其他进程)。