Android 服务/进程的内存太多

Android 服务/进程的内存太多,android,android-service,Android,Android Service,我的应用程序有一个后台服务,定期从网上下载信息。 根据MAT(内存分析器),总内存使用量(保留)是以KB为顺序的,无论如何,如果我打开android的任务管理器,我会看到13-15 MB。 我不知道这是怎么回事:主应用程序已关闭,没有活动正在运行,只有服务 可能是因为在主要活动中,我使用LruCache缓存位图?但是,从理论上讲,从这个活动中退出后,记忆应该被释放出来 编辑: 这是我的LruCache代码,没什么大不了的,只是一个单例,以便每个活动共享缓存内容: public class Por

我的应用程序有一个后台服务,定期从网上下载信息。 根据MAT(内存分析器),总内存使用量(保留)是以KB为顺序的,无论如何,如果我打开android的任务管理器,我会看到13-15 MB。 我不知道这是怎么回事:主应用程序已关闭,没有活动正在运行,只有服务

可能是因为在主要活动中,我使用LruCache缓存位图?但是,从理论上讲,从这个活动中退出后,记忆应该被释放出来

编辑: 这是我的LruCache代码,没什么大不了的,只是一个单例,以便每个活动共享缓存内容:

public class PortableCache {
private static final int CACHE_MB = 1;

private static LruCache<String, Bitmap> cachedBitmaps= new LruCache<String,Bitmap>(CACHE_MB*1024*1024){
    protected int sizeOf(String k,Bitmap v){
        return v.getRowBytes()*v.getHeight();
    }
};

public static LruCache<String, Bitmap> getImageCache(){
    return cachedBitmaps;
}

   }
公共类PortableCache{
私有静态最终整数缓存_MB=1;
私有静态LruCache cachedBitmaps=新LruCache(缓存MB*1024*1024){
受保护的int-sizeOf(字符串k,位图v){
返回v.getRowBytes()*v.getHeight();
}
};
公共静态LruCache getImageCache(){
返回cachedBitmaps;
}
}
但是,缓存大小为1MB,我认为这不是主要原因

编辑2:
奇怪的是,随着时间的推移,服务内存的使用量逐渐减少……从现在的16MB减少到1小时后的9MB。

发布您正在使用的创建和管理LRUCACHEW的代码。您正在运行哪个版本的Android操作系统?位图内存管理在Android<3.0上有很多缺陷。此外,MAT只会告诉您Dalvik堆中使用了多少内存,而不会告诉本机堆。在Android 1.x和2.x上,位图数据存储在本机堆中。另外,我认为应该使用
v.getByteCount()
而不是
v.getRowBytes()*v.getHeight()