Я а, разработка приложения с использованием react Native версии 0.59.10 и react-native-navigation версии 1.1.493. Я использовал MobX для управления состоянием.
В настоящее время я пытаюсь интегрировать собственный SDK, который отслеживает сеансы вождения пользователя.
Перед инициализацией SDK запрашивает у пользователя разрешения на местоположение.
После инициализации SDK он транслирует событие на уровень JS, используя следующий код:
fun notifyJS(
context: Context?,
receiver: BroadcastReceiver,
eventName: String,
data: WritableMap?
) {
val reactApplication = context?.applicationContext as? ReactApplication
val instanceManager = reactApplication?.reactNativeHost?.reactInstanceManager
val reactContext = instanceManager?.currentReactContext
if (reactContext != null) {
Log.d(
LOG_TAG,
"React context is available, sending event $eventName"
)
reactApplication.reactNativeHost?.reactInstanceManager?.currentReactContext?.getJSModule(
DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
)?.emit(eventName, data)
} else {
Log.d(LOG_TAG, "React context is not available")
val pendingResult = receiver.goAsync()
instanceManager!!.addReactInstanceEventListener(
object : ReactInstanceManager.ReactInstanceEventListener {
override fun onReactContextInitialized(reactContext: ReactContext) {
Log.v(
LOG_TAG,
"React context is initialized sending js event $eventName"
)
reactContext.getJSModule(
DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
)?.emit(eventName, data)
instanceManager.removeReactInstanceEventListener(this)
pendingResult.finish()
}
})
instanceManager.createReactContextInBackground()
Log.d(LOG_TAG, "Called to create context in the background")
}
}
в этот момент переменная responseContext всегда имеет значение null, даже если приложение находится в передний план, который заставляет приложение перезапускаться.
У меня есть базовое c понимание нативной разработки, и я часами ищу в Интернете этот случай, но, похоже, не могу понять, как контекст может быть нулевым, когда приложение находится на переднем плане.
Итак, я предполагаю, что есть вероятность того, что, возможно, этот код получит неправильный контекст ...?
Мое приложение использует некоторые другие сторонние библиотеки, и это текущий пакет. json файл
"dependencies": {
"@appdynamics/react-native-agent": "^1.0.223",
"@types/react": "^16.9.1",
"@types/react-native": "^0.57.65",
"babel-plugin-macros": "^2.6.1",
"bugsnag-react-native": "^2.19.1",
"cross-env": "^6.0.3",
"fsevents": "^2.1.3",
"intent-router": "0.0.13",
"mobx": "3.3.1",
"mobx-react": "4.3.3",
"moment": "^2.24.0",
"moment-timezone": "^0.5.26",
"react": "16.8.3",
"react-native": "0.59.10",
"react-native-audio": "^4.1.3",
"react-native-base64": "^0.0.2",
"react-native-cardview": "^1.1.5",
"react-native-chart-kit": "^5.5.0",
"react-native-circular-progress": "^1.3.6",
"react-native-communications": "^2.2.1",
"react-native-config": "^0.11.7",
"react-native-device-info": "^2.3.2",
"react-native-doc-viewer": "^2.7.8",
"react-native-document-picker": "^3.2.4",
"react-native-fetch-blob": "^0.10.8",
"react-native-firebase": "^5.5.6",
"react-native-image-picker": "^0.26.7",
"react-native-maps": "0.25.0",
"react-native-mime-types": "^2.2.1",
"react-native-navigation": "1.1.493",
"react-native-open-settings": "^1.0.1",
"react-native-pages": "^0.9.0",
"react-native-render-html": "^4.1.2",
"react-native-restart": "^0.0.12",
"react-native-settings": "^0.1.1",
"react-native-signature-capture": "^0.4.9",
"react-native-snackbar": "^2.2.0",
"react-native-sound": "^0.10.9",
"react-native-splash-screen": "^3.2.0",
"react-native-svg": "^12.1.0",
"react-native-swipe-list-view": "^3.0.1",
"react-native-swipeable": "^0.6.0",
"react-native-swiper": "^1.5.14",
"react-native-timer": "^1.3.6",
"react-native-zendrive": "latest",
"typescript": "^3.5.3",
"victory-native": "^34.1.0"
}
В моем тестировании, чтобы выяснить, что вызывает такое поведение попытался удалить библиотеки из моего кода, даже когда я загрузил только: ReactNativePackage, ReactNativeConfigPackage и RNNPackage, чтобы возникали проблемы, поэтому я довольно сильно думаю, что проблема связана с использованием response-native-навигации.
Итак, я попробовал чтобы создать новое черное приложение для воспроизведения этой проблемы, но в совершенно новом приложении (та же самая реакция-native и версия rnn) проблема не воспроизводится. Поэтому я предполагаю, что со временем при разработке приложения некоторые конфигурации и исправления были помещены где-то в коде.
Мне очень трудно отлаживать и определять причину этой проблемы