Bonjour, j'essaie d'appliquer les recommandations de l'article officiel Android sur les WeakReference, ainsi que l'excellent article d'adiGuba sur son blog, je me suis décidé à essayer d'appliquer les recommandations sur un code simpliste que j'avais réalisé pour appréhender les Intents. Ce que je voudrais savoir, c'est juste si j'ai bien appliqué les recommandations (en particulier celles de l'article officiel Android : http://developer.android.com/resourc...ory-leaks.html)

Mon programme (manque les layouts, les strings et les values dans les différents fichiers xml, mais ce n'est pas indispensable de les présenter)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
package org.isgreat.loloof64.android.simple_intent_result_example;
 
import java.lang.ref.WeakReference;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class ReadingActivity extends Activity {
 
	public static final int EDIT_CONTENTS = 1;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.reading);
		Button editButton = (Button) findViewById(R.id.edit_button);
		editButton.setOnClickListener(new EditButtonClickListener(this));
	}
 
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == EDIT_CONTENTS){
			if(resultCode == RESULT_OK){
				TextView firstNameView = (TextView) findViewById(R.id.first_name);
				TextView lastNameView = (TextView) findViewById(R.id.last_name);
				TextView ageView = (TextView) findViewById(R.id.age);
 
				String firstNameField = getString(R.string.first_name_field);
				String lastNameField = getString(R.string.last_name_field);
				String ageField = getString(R.string.age_field);
 
				String firstName = data.getStringExtra("first_name");
				String lastName = data.getStringExtra("last_name");
				String age = data.getStringExtra("age");
 
				firstNameView.setText(firstNameField+firstName);
				lastNameView.setText(lastNameField+lastName);
				ageView.setText(ageField+age);
			}
		}
	}
 
	private static class EditButtonClickListener implements OnClickListener {
 
		private final WeakReference<Activity> mParentActivity;
 
		public EditButtonClickListener(Activity parentActivity){
			mParentActivity = new WeakReference<Activity>(parentActivity);
		}
 
		public void onClick(View view){
			Activity activity = mParentActivity.get();
			Intent callingEditingViewIntent = new Intent(activity, WritingActivity.class);
			activity.startActivityForResult(callingEditingViewIntent, EDIT_CONTENTS);
		}
 
	}
 
}
Pour information, cette application affiche une page de "labels" (TextView) nom=<nom>/prenom=<prenom>/age=<age>, où les 3 valeurs <nom>, <prenom>, <age> sont remplis dans un formulaire "démarré" (cars il s'agit de l'acitvity WritingActivity dont je n'ai pas présenté le code) et retournant ces 3 valeurs en cas de confirmation de ce dernier.

Désolé si cette discussion vous paraît inutile, mais c'est que je ne suis pas sûr d'avoir changé grand chose (cad empêcher les fuites de mémoire) en déclarant ma WeakReference pour ensuite redemander la valeur reelle par l'appel WeakReference#get() (le # est volontaire).
De plus, je voulais référence à la base l'Application liée à l'Activity, mais j'ai renoncé à cause de l'appel à mon Intent dans la méthode onClick(View).