Créateur d'applications mobiles - Ripple Motion

FACTORY METHOD public static Intent makeIntent(Context,. Params…) {. // … intent.putExtra(EXTRA_P1, p1) intent.putExtra(EXTRA_P2, p2). // … } ...
494KB taille 6 téléchargements 192 vues
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