react-native-navigation的迁移库

NavigationApplication.java 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.reactnativenavigation;
  2. import android.app.Activity;
  3. import android.app.Application;
  4. import android.os.Bundle;
  5. import com.facebook.react.ReactApplication;
  6. import com.facebook.react.ReactInstanceManager;
  7. import com.facebook.react.ReactNativeHost;
  8. import com.facebook.react.ReactPackage;
  9. import com.facebook.react.bridge.ReactContext;
  10. import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
  11. import com.facebook.react.shell.MainReactPackage;
  12. import com.reactnativenavigation.react.NavigationEventEmitter;
  13. import com.reactnativenavigation.react.NavigationPackage;
  14. import com.reactnativenavigation.react.ReactDevPermission;
  15. import java.util.Arrays;
  16. import java.util.List;
  17. import java.util.concurrent.atomic.AtomicBoolean;
  18. public abstract class NavigationApplication extends Application implements ReactApplication {
  19. public static NavigationApplication instance;
  20. private ReactNativeHost host;
  21. @Override
  22. public void onCreate() {
  23. super.onCreate();
  24. instance = this;
  25. host = new ReactNativeHost(this) {
  26. @Override
  27. protected boolean getUseDeveloperSupport() {
  28. return isDebug();
  29. }
  30. @Override
  31. protected List<ReactPackage> getPackages() {
  32. return Arrays.asList(
  33. new MainReactPackage(),
  34. new NavigationPackage()
  35. );
  36. }
  37. };
  38. registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
  39. private AtomicBoolean creating = new AtomicBoolean(true);
  40. @Override
  41. public void onActivityCreated(final Activity activity, Bundle bundle) {
  42. if (!(activity instanceof NavigationActivity)) return;
  43. creating.set(true);
  44. }
  45. @Override
  46. public void onActivityStarted(Activity activity) {
  47. }
  48. @Override
  49. public void onActivityResumed(Activity activity) {
  50. if (!(activity instanceof NavigationActivity)) return;
  51. if (ReactDevPermission.shouldAskPermission()) {
  52. ReactDevPermission.askPermission(activity);
  53. return;
  54. }
  55. if (!host.getReactInstanceManager().hasStartedCreatingInitialContext()) {
  56. host.getReactInstanceManager().addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
  57. @Override
  58. public void onReactContextInitialized(ReactContext context) {
  59. host.getReactInstanceManager().removeReactInstanceEventListener(this);
  60. new NavigationEventEmitter(context).emitAppLaunched();
  61. }
  62. });
  63. host.getReactInstanceManager().createReactContextInBackground();
  64. host.getReactInstanceManager().onHostResume(activity, (DefaultHardwareBackBtnHandler) activity);
  65. return;
  66. }
  67. host.getReactInstanceManager().onHostResume(activity, (DefaultHardwareBackBtnHandler) activity);
  68. if (creating.compareAndSet(true, false)) {
  69. new NavigationEventEmitter(host.getReactInstanceManager().getCurrentReactContext()).emitAppLaunched();
  70. }
  71. }
  72. @Override
  73. public void onActivityPaused(Activity activity) {
  74. if (!(activity instanceof NavigationActivity)) return;
  75. if (host.getReactInstanceManager().hasStartedCreatingInitialContext()) {
  76. host.getReactInstanceManager().onHostPause(activity);
  77. }
  78. }
  79. @Override
  80. public void onActivityStopped(Activity activity) {
  81. }
  82. @Override
  83. public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
  84. }
  85. @Override
  86. public void onActivityDestroyed(Activity activity) {
  87. if (!(activity instanceof NavigationActivity)) return;
  88. if (host.getReactInstanceManager().hasStartedCreatingInitialContext()) {
  89. host.getReactInstanceManager().onHostDestroy(activity);
  90. }
  91. }
  92. });
  93. }
  94. @Override
  95. public ReactNativeHost getReactNativeHost() {
  96. return host;
  97. }
  98. public abstract boolean isDebug();
  99. }