浏览代码

ReactContext initialized listener on NavigationApplication

Daniel Zlotin 8 年前
父节点
当前提交
0dcbe6877d

+ 9
- 0
android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java 查看文件

@@ -5,6 +5,7 @@ import android.os.Handler;
5 5
 import android.support.annotation.Nullable;
6 6
 
7 7
 import com.facebook.react.ReactPackage;
8
+import com.facebook.react.bridge.ReactContext;
8 9
 import com.facebook.react.bridge.WritableMap;
9 10
 import com.reactnativenavigation.react.NavigationReactGateway;
10 11
 import com.reactnativenavigation.react.ReactGateway;
@@ -56,6 +57,13 @@ public abstract class NavigationApplication extends Application {
56 57
 
57 58
     public abstract boolean isDebug();
58 59
 
60
+    /**
61
+     * override to listen to react initialization event
62
+     */
63
+    public void onReactInitialized(ReactContext reactContext) {
64
+        // nothing
65
+    }
66
+
59 67
     @Nullable
60 68
     public abstract List<ReactPackage> createAdditionalReactPackages();
61 69
 
@@ -87,4 +95,5 @@ public abstract class NavigationApplication extends Application {
87 95
         }
88 96
         reactGateway.getReactEventEmitter().sendEvent(eventId, arguments);
89 97
     }
98
+
90 99
 }

+ 11
- 1
android/app/src/main/java/com/reactnativenavigation/react/NavigationReactGateway.java 查看文件

@@ -16,7 +16,7 @@ import com.reactnativenavigation.bridge.NavigationReactPackage;
16 16
 import java.util.ArrayList;
17 17
 import java.util.List;
18 18
 
19
-public class NavigationReactGateway implements ReactGateway {
19
+public class NavigationReactGateway implements ReactGateway, ReactInstanceManager.ReactInstanceEventListener {
20 20
 
21 21
     private OnJsDevReloadListener onJsDevReloadListener;
22 22
     private ReactInstanceManager reactInstanceManager;
@@ -26,10 +26,12 @@ public class NavigationReactGateway implements ReactGateway {
26 26
         reactInstanceManager = createReactInstanceManager();
27 27
     }
28 28
 
29
+    @Override
29 30
     public void startReactContextOnceInBackgroundAndExecuteJS() {
30 31
         if (reactInstanceManager == null) {
31 32
             reactInstanceManager = createReactInstanceManager();
32 33
         }
34
+
33 35
         if (!reactInstanceManager.hasStartedCreatingInitialContext()) {
34 36
             reactInstanceManager.createReactContextInBackground();
35 37
         }
@@ -58,6 +60,7 @@ public class NavigationReactGateway implements ReactGateway {
58 60
     public void onDestroyApp() {
59 61
         reactInstanceManager.onHostDestroy();
60 62
         reactInstanceManager.destroy();
63
+        reactInstanceManager.removeReactInstanceEventListener(this);
61 64
         reactInstanceManager = null;
62 65
     }
63 66
 
@@ -105,6 +108,8 @@ public class NavigationReactGateway implements ReactGateway {
105 108
             replaceJsDevReloadListener(manager);
106 109
         }
107 110
 
111
+        manager.addReactInstanceEventListener(this);
112
+
108 113
         return manager;
109 114
     }
110 115
 
@@ -131,4 +136,9 @@ public class NavigationReactGateway implements ReactGateway {
131 136
 
132 137
         list.addAll(additionalReactPackages);
133 138
     }
139
+
140
+    @Override
141
+    public void onReactContextInitialized(ReactContext context) {
142
+        NavigationApplication.instance.onReactInitialized(context);
143
+    }
134 144
 }