Créateur d’applications mobiles
#TECHTALK
TechTalk gratuits et ouverts au public au sein de nos locaux ! N’hésitez pas à vous inscrire aux prochaines sessions sur notre site: ripplemotion-services.fr
#TECHTALK
TechTalk sous forme de courtes formations le mercredi de 17h à 18h ! Échange entre vous et nos spécialistes en développement mobile
ACTIVITY (+FRAGMENT) LIFECYCLE FROM THE TRENCHES
RMS Tech Talk #5 - 23.11.2016
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
EN THÉORIE, IL N’Y A PAS DE PROBLÈME ACTIVITY LIFECYCLE
5
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
STINKY FEET* MARKERS Documentation is sparse Official documentation is incomplete
ACTIVITY LIFECYCLE
Behaviour changes between Android versions Behaviour changes between Support Library versions Behaviour changes in the wild 6
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
SO WHAT ?
Invalid Activity/Fragment state management is (usually) : #1 crash reason #1 hard to reproduce UI bugs
7
TechTalk #5 - 23.11.2016
SOME EXAMPLES IN THE WILD
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
8
TechTalk #5 - 23.11.2016
SOME EXAMPLES IN THE WILD
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
9
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
RULE #1 EVERYTHING AN ACTIVITY NEEDS MUST BE PROVIDED IN ITS INTENT
10
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
RULE #1 IMPLEMENTATION public void onCreate(…) { // … self.param = getIntent().getParcelableExtra(ARG_PARAM) } self.param is retrieved from intent data and not some shared state (singleton …) 11
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
RULE #2 NEVER CREATE AN INTENT BY YOURSELF TO START AN ACTIVITY. ACTIVITY LIFECYCLE
12
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
RULE #2 USE AN INTENT FACTORY METHOD public static Intent makeIntent(Context, Params…) { // … intent.putExtra(EXTRA_P1, p1) intent.putExtra(EXTRA_P2, p2) // … }
13
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
RULE #3 SAVE ACTIVITY/FRAGMENT STATE ACTIVITY LIFECYCLE
14
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
RULE #3 SAVE INSTANCE STATE
public void onSaveBundleInstanceState(out) { // must at least serialize what was needed // to create the activity } public void onCreate(bundleState) { if (bundleState == null) { // read from intent.getExtras() } else { //read initial state from bundleState // + any additional state } } 15
TechTalk #5 - 23.11.2016
RULE #3 SAVE INSTANCE STATE
OLIVIER TABONE Co-fondateur / Directeur
Settings > Developer > Advanced > Do not keep activities > ON ACTIVITY LIFECYCLE
16
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
RULE #4 LET THE FRAGMENT MANAGER RESTORE FRAGMENT STATE ACTIVITY LIFECYCLE
17
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
RULE #4 FRAGMENT MANAGER RESTORES FRAGMENT public onCreate(state) { if (state == null) { //attach new fragments } else {
ACTIVITY LIFECYCLE
} }
18
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
RULE #5 KNOW WHAT TO DO AT EACH LIFECYCLE CALLBACK ACTIVITY LIFECYCLE
19
TechTalk #5 - 23.11.2016
RULE #5 LIFECYCLE CALLBACKS callback
Activity / Fragment
iOS equivalent of
onCreate
Bind UI with class members
viewDidLoad
Init with extras / arguments
VC constructor
Or restore from saved state
decodeRestorableState
OLIVIER TABONE Co-fondateur / Directeur
ACTIVITY LIFECYCLE
onActivityAttached
activity related initialisation of members
onStart
start api calls / refresh
onResume
resume promises / async work
viewWillAppear
onPause
pause promises / async work
viewDidDisappear
onStop
cancel promises / async work
onSaveBundleInstan ceState
save extras + arguments
onDestroy
20
cancel Promises / Async work
encodeRestorableState deinit
TechTalk #5 - 23.11.2016
OLIVIER TABONE Co-fondateur / Directeur
RECAP #1 Everything an activity needs must be provided in its Intent #2 Never Create an intent by yourself to start an activity. #3 Save activity/fragment state
ACTIVITY LIFECYCLE
#4 Let the fragment manager restore fragment state #5 Know what to do at each lifecycle callback 21
Merci de votre participation !
OLIVIER TABONE Co-fondateur / Directeur
[email protected] 06 83 01 05 76
Créateur d’applications mobiles