gpt4 book ai didi

java - Singleton 被回收

转载 作者:行者123 更新时间:2023-12-02 00:11:23 24 4
gpt4 key购买 nike

我在 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 ...*/
}

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

我无法确定是什么触发了回收 - 有时应用程序需要在后台停留更长时间,有时需要几分钟。我正在记录 DataLib 类的指针,这样我就可以知道它确实发生了变化 = 被回收了。

有什么想法吗?谢谢。

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

最佳答案

It gets recycled from time to time and I don't understand why.

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

sometimes app needs to stay in the background for longer time, sometimes it's in a few minutes

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

如果您正在后台执行特定工作,则应使用服务来执行该操作,以向操作系统表明您正在后台执行独立于任何 Activity 的工作。这不会阻止 Android 终止您的进程(例如,应用户请求),但它会降低其自行终止您的进程的可能性(即,操作系统倾向于选择其他进程)。

关于java - Singleton 被回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com