我有两个简单的活动
在
以下是我的示例代码:
A
和 B
。用户通过按下按钮从A
开始B
,然后通过按返回按钮返回到A
。在
B
活动的onDestroy()
方法中,我回收了一些在B
活动中使用的背景图像。我的疑问是:为什么当再次启动B
活动时,我会得到“尝试使用已回收位图”的错误?难道不应该在onCreate()
方法中再次加载位图吗?就像在第一次启动活动时必须加载位图一样。以下是我的示例代码:
public class ActivityB extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.selectionpage);
}
@Override
public void onDestroy() {
ImageView iv = (ImageView) findViewById(R.id.imageView1);
((BitmapDrawable)iv.getDrawable()).getBitmap().recycle();
LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayout1);
((BitmapDrawable)ll.getBackground()).getBitmap().recycle();
super.onDestroy();
}
}
我在从 A
启动 B
活动时使用的代码
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
selectionpage.XML :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/backgroundimage">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selectionimage"/>
</LinearLayout>
这部分内容可能是相关的。我不确定。我注意到在启动活动B之后,即使它已经被销毁,在使用MAT分析内存堆时仍然可以看到我的活动实例。GC根路径似乎通过Java.lang.Thread和ContextImpl。