Atelier 5
Atelier 5
Atelier 5
Introductio
Dans cet atelier, vous en apprendrez davantage sur le cycle de vie de l'activité. Le cycle
de vie est l'ensemble des états dans lesquels une activité peut se trouver tout au long de
sa durée de vie, du moment où elle est créée jusqu'au moment où elle est détruite et où le
système récupère ses ressources. Lorsqu'un utilisateur navigue entre les activités de votre
application (ainsi que vers et hors de votre application), les activités passent d'un état à
l'autre au cours de leur cycle de vie
fi
fi
A
.
fi
.

Aperçu de l’applicatio
Dans cette atelier, l'apparence et le comportement de l'application sont à peu près
identiques à ceux du dernier atelier de programmation TwoActivities. Il contient
deux activités et donne à l'utilisateur la possibilité d'envoyer entre elles. Les modi cations
que vous apportez à l'application dans cet atelier n'affecteront pas son comportement
utilisateur visible
3. Ajoutez la méthode de rappel onStart(), avec une instruction dans le journal pour cet
événement
@Overrid
public void onStart()
super.onStart()
Log.d(LOG_TAG, "onStart")
A
y
fi

5. Exécutez votre application
Cliquez sur l'onglet Logcat en bas d'Android Studio pour af cher le volet Logcat. Vous
devriez voir trois messages de journal indiquant les trois états du cycle de vie de l’activité
par lesquels la transition a commencé
D/MainActivity: ------
D/MainActivity: onCreat
D/MainActivity: onStar
D/MainActivity: onResum
A
.
fi
fi
fi
n

4. Expérimentez en utilisant votre application et notez les événements du cycle de vie qui
se produisent en réponse à différentes actions. En particulier, essayez ces choses
A) Utilisez l'application normalement (envoyez un message, répondez avec un autre
message)
B) Utilisez le bouton Retour pour revenir du deuxième Activity à l’activité principale
C) Utilisez la èche vers le haut dans la barre d'applications pour revenir du
deuxième Activity à l’activité principale
D) Faites pivoter l'appareil sur la principale et la seconde activité à différents moments
dans votre application et observez ce qui se passe dans le journal et sur l’écran
E) Appuyez sur le bouton d'aperçu (le bouton carré à droite de Accueil) et fermez
l'application (appuyez sur le X )
F) Revenez à l'écran d'accueil et redémarrez votre application
CONSEIL : Si vous exécutez votre application dans un émulateur, vous pouvez simuler la
rotation avec Control+L ou Control+R
Activité principal
Les extraits de code suivants montrent le code ajouté dans MainActivity
La méthode onCreate()
@Overrid
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@Overrid
fl
e
fi
fi
fi
;
A
.

protected void onStart()
super.onStart()
Log.d(LOG_TAG, "onStart")
@Overrid
protected void onPause()
super.onPause()
Log.d(LOG_TAG, "onPause")
@Overrid
protected void onRestart()
super.onRestart()
Log.d(LOG_TAG, "onRestart")
@Overrid
protected void onResume()
super.onResume()
Log.d(LOG_TAG, "onResume")
@Overrid
protected void onStop()
super.onStop()
Log.d(LOG_TAG, "onStop")
@Overrid
protected void onDestroy()
super.onDestroy()
Log.d(LOG_TAG, "onDestroy")
Deuxième activit
Les extraits de code suivants montrent le code ajouté dans SecondActivity
La méthode returnReply()
fi
;
A
.

public void returnReply(View view)
String reply = mReply.getText().toString()
Intent replyIntent = new Intent()
replyIntent.putExtra(EXTRA_REPLY, reply)
setResult(RESULT_OK, replyIntent)
Log.d(LOG_TAG, "End SecondActivity")
nish()
L'état de chaque activité est stocké sous la forme d'un ensemble de paires clé/valeur dans
un objet Bundle appelé état d'instance de l’activité. Le système enregistre les informations
d'état par défaut dans l'état de l'instance Bundle juste avant l'arrêt de l'instance de
l’activité et les transmet à la nouvelle instance à restaurer
Pour éviter de perdre des données lorsqu’elles sont détruites, vous devez implémenter
la méthode onSaveInstanceState(). Le système appelle cette méthode sur votre Activité
(entre onPause()et onStop()) lorsque l’activité est soit détruite soit recréée
Les données que vous enregistrez dans l'état de l'instance sont spéci ques à cette instance
uniquement pendant la session d'application en cours. Lorsque vous arrêtez et
redémarrez une nouvelle session d'application, l'état de l'instance est perdu et revient à
son apparence par défaut. Si vous devez enregistrer les données utilisateur entre les
sessions de l'application, utilisez les préférences partagées ou une base de données
fi
fi
fi
;
fi
.
fi
A
;
fi
.

Enregistrez l'état de l'instance d'activité avec onSaveInstanceState(
Les informations d'état de certains éléments View de votre layout sont automatiquement
enregistrées lors des modi cations de con guration, et la valeur actuelle d’EditText est
l'un de ces cas
Dans cette tâche, vous ajoutez du code pour préserver l'état d'instance des deux éléments
TextView à l'aide de onSaveInstanceState()
1. Ouvrez MainActivity
2. Ajoutez cette implémentation de squelette de onSaveInstanceState()
@Overrid
public void onSaveInstanceState(Bundle outState)
super.onSaveInstanceState(outState)
3. Véri ez si l'en-tête est actuellement visible, et si c'est le cas, mettez cet état de visibilité
dans l'état Bundle avec la méthode putBoolean() et la clé "reply_visible"
if (mReplyHeadTextView.getVisibility() == View.VISIBLE)
outState.putBoolean("reply_visible", true)
4. Dans cette même véri cation, ajoutez le texte de réponse dans le chier Bundle
outState.putString("reply_text",mReplyTextView.getText().toString())
1. Dans la méthode onCreate(), une fois les variables initialisées avec ndViewById(),
ajoutez un test pour vous assurer que savedInstanceState n'est pas nul
fi
e
fi
fi
fi
.
fi
.
fi
fi
.
fi
A
;
fi
;
fi
)

)
Lorsque votre activité est créé, le système transmet l'état Bundle comme seul argument de
onCreate(). La première fois qu'elle est appelée et que votre application démarre, c'est
le Bundle est null car il n'y a aucun état existant la première fois que votre application
démarre.
2. À l'intérieur de cette véri cation, obtenez la visibilité actuelle (vrai ou faux) Bundle
avec la clé "reply_visible"
if (savedInstanceState != null)
boolean isVisible =
savedInstanceState.getBoolean("reply_visible")
if (isVisible)
S'il y a une clé reply_visible dans l'état Bundle (et isVisible est true), vous devrez
restaurer l’état
mReplyHeadTextView.setVisibility(View.VISIBLE)
mReplyTextView.setText(savedInstanceState.getString("reply_text"))
mReplyTextView.setVisibility(View.VISIBLE)
fi
fi
{
A
:
fi

Activité principal
Les extraits de code suivants montrent le code ajouté dans MainActivity
@Overrid
public void onSaveInstanceState(Bundle outState)
super.onSaveInstanceState(outState)
// If the heading is visible, message needs to be saved
// Otherwise we're still using default layout
if (mReplyHeadTextView.getVisibility() == View.VISIBLE)
outState.putBoolean("reply_visible", true)
outState.putString("reply_text",
mReplyTextView.getText().toString())
@Overrid
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d(LOG_TAG, "-------")
Log.d(LOG_TAG, "onCreate")
fi
fi
fi
A
.