有两项活动。
在第一个活动中,我得到了一个相当大的静态ArrayList,包括位图和另一个需要的信息。我把它设置为静态,因为我需要从另一个活动中获取它,并且它的加载需要很长时间。
在另一个活动中,我还有一个静态字段,用作获取前一个活动中Intent中存在的数据的键。
如果我尝试从另一个活动开始并多次返回,我会关闭VM。
更清楚的是,这是我的代码片段:
public class MoviesGallery extends Activity
{
...
private static ArrayList<Movie> films = new ArrayList<Movie>();
...
public void contextButtonsClickHandler(View v)
{
switch(v.getId())
{
case R.id.play_button:
Log.d("Context Button", "Play button has clicked");
mContextButtonHasPressed = true;
Intent filmData = new Intent(MoviesGallery.this, MovieInfo.class);
filmData.putExtra(MovieInfo.mPOS,mPOSITION_OF_CLICKED_ITEM);
startActivityForResult(filmData, 1);
break;
...
}
这是另一项活动:
public class FilmInfo extends Activity
{
public static String mPOS = "pos";
private int mNumOfFilm = -1;
private LinearLayout mWall;
...
protected void onCreate(Bundle savedInstanceState)
{
Bundle extra = getIntent().getExtras();
mNumOfFilm=extra.getInt(mPOS);
...
Drawable d = new BitmapDrawable(MoviesGallery.getMoviesArray().get(mNumOfFilm).getWall()));
mWall = (LinearLayout) findViewById(R.id.Wall);
mWall.setBackgroundDrawable(d);
...
setResult(0);
}
答案 0 :(得分:1)
我建议可能的内存泄漏点在FilmInfo
类成员中:
private LinearLayout mWall;
布局引用了Activity,每次都会更改。
因此,为避免引用死活动,请在FilmInfo
类
@Override
public boolean onContextItemSelected(MenuItem item)
{
//blah-blah
mWall=null;
}
无论如何,配方很简单 - 尽量避免保留可能包含对Activity / Context对象的引用的对象。