From 1c740b74f25157bcd0b58f88c7da7716deea763b Mon Sep 17 00:00:00 2001 From: Evan Ricketts <35305520+ericketts@users.noreply.github.com> Date: Thu, 21 Mar 2019 00:47:09 -0700 Subject: [PATCH] [V2] Tweak app lifecycle docs (#4877) * app launch docs consistent UI capitalisation * app launch docs greater detail --- docs/docs/app-launch.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/docs/app-launch.md b/docs/docs/app-launch.md index 4a776785d3a..39198c7a4a9 100644 --- a/docs/docs/app-launch.md +++ b/docs/docs/app-launch.md @@ -1,5 +1,5 @@ # App Launch -When your app is launched for the first time, the bundle is parsed and executed. At this point you need to show your ui. To do so, Listen to the `appLaunched` event and call `Navigation.setRoot` when the event is received. +When your app is launched for the first time, the bundle is parsed and executed. At this point you need to show your UI. To do so, Listen to the `appLaunched` event and call `Navigation.setRoot` when the event is received. ```js Navigation.events().registerAppLaunchedListener(() => { @@ -7,7 +7,7 @@ Navigation.events().registerAppLaunchedListener(() => { }); ``` -!> Register the listener as soon as possible - it should be one of the first lines in your `index.js` file. +!> Register the listener with `registerAppLaunchedListener` as soon as possible - it should be one of the first lines in your `index.js` file. If you're observing a "white screen" or a hanging splash screen after relaunching your app, it probably means `Navigation.setRoot` isn't called once the app has launched. Perhaps the listener was registered too late. ## The difference between the platforms @@ -15,14 +15,14 @@ When your app is launched, RN makes sure Js context is running. Js context is wh There are a few differences between iOS and Android in this regard ### iOS -Each time the app moves the the background, Js context is destroyed as the app's process is destroyed. +Whenever the app is put into the background, the app process could potentially be destroyed by the system. If this destruction of the app takes place, the Js context will be destroyed along with the app process. ### Android An Android application is typically bound to two contexts: -1. Application - bound to the process -2. Activity - bound to UI +1. Application context - bound to the app process +2. Activity context - bound to app UI -Js Context is executed and bound to the Application. This means, that even when the Activity is destroyed, Js Context is still executed until the Application (and your process) are destroyed by the system. +React's Js Context is executed on and bound to the Application context. This means that even when the Activity context (and thus the UI) is destroyed, React's Js Context remains active until the Application (and your process) are destroyed by the system. -!>*Important!* Because of this, when your app returns to foreground, Js Context might still exist on Android - meaning you might not need to initialise all of your logic, instead you'll only need to call `Navigation.setRoot`. +!>*Important!* Because of this, when your app returns to foreground, Js Context might still exist on Android, even when the Activity and UI context has been destroyed - meaning you might not need to initialise all of your app logic; instead you'll only need to call `Navigation.setRoot` to repopulate the UI context. This circumstance can easily be determined by setting a flag on your app's first `appLaunched` event, and checking the value of that flag on subsequent `appLaunched` events -- if the flag is true in your `appLaunched` callback, you need to call `Navigation.setRoot` to repopulate the UI.