我得到了一个具有以下架构的课程:
public class StaticClass{
private static LruCache<Obj> list = new LruCache<Obj>();
public static LruCache<Obj> getList(){
return list;
}
}
现在,对此列表的引用仅用于普通活动。 但是,活动会启动一项服务,即使在每项活动结束后,该服务仍将继续存在。 鉴于进程中存在服务,对静态列表的引用是否仍然存在? 我问这个是因为我的服务占用了大量内存而且我确信内存应该更少,而且当我再次打开应用程序时,我发现一切都快得多(lru缓存用于位图缓存),所以我我猜这种静态仍然存在。
修改 真奇怪啊!如果我取消静态引用然后重新打开应用程序我从我的游标适配器得到一个空指针异常!实际上,游标适配器代码是这样的:
public MyAdapter(){
cache = StaticClass.getCache();
}
public void bindView(View view, Context context, Cursor c) {
cache.get(...) //this throws null pointer exception
所以我唯一能想到的是适配器是我的主要活动没有关闭......但它是:onDestroy()被调用:我检查了它!我的服务根本没有参考适配器!