我有一个应用程序从服务器下载图像,将它们存储在SD卡上,然后以幻灯片形式显示给用户.该应用程序有许多不同的幻灯片,用户可以查看.我的问题是,在我查看几个画廊后,我发现内存不足错误.我做了很多谷歌搜索,并阅读了Romain Guy的Avoiding Memory Leaks文章大约20次.我试图复制他的unbindDrawables()方法,但是无法在Gallery对象上调用removeAllViews().我也尝试在所有位图上调用recycle()但是当我在适配器中的位图上执行时,应用程序会在打开图库时立即抛出错误.我也尝试重新编码幻灯片,以便在适配器外部创建所有位图,然后将它们作为数组传递 - 这允许我遍历我的位图数组并在幻灯片中的onDestroy方法中对每个位图调用recycle()活动 - 但这实际上似乎使泄漏变得更糟.
以下是我的幻灯片活动的代码:
public class Slideshow extends Activity {
static String galleryId;
public static final int MSG_DOWNLOADED = 0;
static Handler handler;
static Gallery g;
static ArrayList<String> filePaths;
static String subFolder;
static ArrayList<String> imageToGet;
static LinearLayout pb;
static boolean firstTime = true;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.slideshow);
Context context = getApplicationContext();
Bundle extras = getIntent().getExtras();
if(extras != null){
galleryId = extras.getString("galleryId");
}
pb = (LinearLayout) findViewById(R.id.progress);
handler = new Handler(){
@Override
public …Run Code Online (Sandbox Code Playgroud)