J'ai deux activités simples A
y B
. L'utilisateur commence B
de A
en appuyant sur un bouton, et l'utilisateur revient alors à A
en appuyant sur le bouton retour.
Dans le onDestroy()
méthode d'activité B
Je recycle certaines images de fond utilisées dans l'activité B
. Ce que j'essaie de comprendre, c'est pourquoi, lorsque l'activité B
est redémarré, je reçois le message "trying to use a recycled bitmap". Les bitmaps seront certainement rechargés dans la méthode onCreate(), comme ils ont dû l'être lors du premier lancement de l'activité.
Voici mon exemple de code :
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();
}
}
Le code que j'utilise pour lancer l'activité B
de A
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
page de sélection.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>
Cette partie peut être pertinente. Je ne suis pas sûr. J'ai remarqué qu'après avoir lancé l'activité B, même après sa destruction, je peux encore voir une instance de mon activité lorsque j'analyse le tas de mémoire à l'aide de MAT. Le chemin vers les racines du GC semble passer par Java.lang.Thread et ContextImpl.