2013-02-21 66 views
0

我正在维护一个包含大量图像的大应用程序。我使用它的主要问题是应用程序崩溃,因为它会产生内存错误。我正在尝试使用SoftReferences和WeakReferences,我已经阅读过它,但我不知道是否必须在Android类(如GridView,BaseAdapter或ImageView)中使用它们。如何在Android应用程序中使用Soft/WeakReference类?

我的应用程序有一个地图与标记顶部有一个画廊的活动。当我点击一个气球时,第二个活动出现在一个gridview中。

第一个活动,当我移动地图时,活动重新加载库中的所有标记和图像,并添加新的标记和图像。它具有以下属性:

ShotButton shotButton; 画廊画廊; 列表图片; private ImageView mMyLocationImage;

Dialog spinnerDialog; 

private GoogleMap map; 

private HashMap<String, Marker> identified_marker = new HashMap<String, Marker>(); 
private HashMap<Marker, DavinciImage> identified_XXX_images = new HashMap<Marker, XXXImage>(); 

private GalleryAdapter gallery_adapter; 

private AsyncTask<Poi, Void, Void> refresh_pois_async = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     ---- 
     new SoftReference<List<Object>>(XXXImages); 
     new WeakReference<HashMap<String, Marker>>(identified_marker); 
    new WeakReference<HashMap<Marker, XXXImage>>(identified_XXX_images); 
    } 

我的问题是,当我移动地图,销毁或暂停我做任何新的东西软/ WeakReference的类来释放内存的活动?我是否需要添加一个具有软/弱引用类的新属性,例如GalleryAdapter必须添加到soft/weakReference类中或系统为我释放这个内存?

第二个活动具有包含用户所有图像的gridview。我在进入活动时加载所有数据,并在活动需要时加载图像。我在这个活动中有以下几点。

ImageView     mUserImage; 
public String    myApplicationUserId; 
public GridAdapter   imageAdapter = null; 
public GridView    gridview  = null; 
public ImageLoader_Profile mImageLoaderMedium; 


--- 
gridview.setScrollingCacheEnabled(true); 
gridview.setFriction(10); 

--- 
new WeakReference<ImageLoader_Profile>(mImageLoaderMedium); 

ImageLoader_Profile负责管理图像的加载。

public class ImageLoader_Profile{ 

    MemoryCache      memoryCache = new MemoryCache(); 
    private Map< ImageView, String> imageViews = Collections.synchronizedMap(new WeakHashMap< ImageView, String>()); 

    public ImageLoader_Profile(Context context, Bitmap canvas, int deviceDensity) { 

     ....   
     new SoftReference<MemoryCache>(memoryCache); 
     new SoftReference<Map<ImageView,String>>(imageViews); 
    } 

这就是我需要做的一切,或者在这种情况下我必须做任何其他软参考?我有点困惑。

回答

1

你不应该软弱参考缓存了。

由于Android 2.3,软弱引用缓存系统无效而改变了垃圾收集过程。

现在,你应该使用LruCache,这是一个好:)

如何使用LruCache?试试这个

Caching Bitmaps

+1

是的,我知道,但我保持这个程序,现在我没有时间去改变它。那么,当我应该使用软弱引用来释放以上信息的内存?而且,我是否需要在GridView,Adapters或ImageView中使用软弱引用? – beni 2013-02-21 10:05:36

相关问题