fix: Fix hot-reload crash caused by Frame Processor Runtime being initialized twice (#258)
* Fix Frame Processor Runtime being initialized twice causing a hot-reload to crash * Remove unnecessary `HasRegisteredPlugins` singleton * make non-optional * `REACT_CLASS` -> `TAG` * fix nullable
This commit is contained in:
@@ -15,15 +15,7 @@ import java.lang.ref.WeakReference
|
||||
class FrameProcessorRuntimeManager(context: ReactApplicationContext) {
|
||||
companion object {
|
||||
const val TAG = "FrameProcessorRuntime"
|
||||
private var HasRegisteredPlugins = false
|
||||
val Plugins: ArrayList<FrameProcessorPlugin> = ArrayList()
|
||||
get() {
|
||||
if (HasRegisteredPlugins) {
|
||||
throw Error("Tried to access Frame Processor Plugin list, " +
|
||||
"but plugins have already been registered (list is frozen now!).")
|
||||
}
|
||||
return field
|
||||
}
|
||||
|
||||
init {
|
||||
System.loadLibrary("reanimated")
|
||||
@@ -32,15 +24,15 @@ class FrameProcessorRuntimeManager(context: ReactApplicationContext) {
|
||||
}
|
||||
|
||||
@DoNotStrip
|
||||
private var mHybridData: HybridData?
|
||||
private var mContext: WeakReference<ReactApplicationContext>?
|
||||
private var mScheduler: Scheduler?
|
||||
private var mHybridData: HybridData
|
||||
private var mContext: WeakReference<ReactApplicationContext>
|
||||
private var mScheduler: Scheduler
|
||||
|
||||
init {
|
||||
val holder = context.catalystInstance.jsCallInvokerHolder as CallInvokerHolderImpl
|
||||
mScheduler = Scheduler(context)
|
||||
mContext = WeakReference(context)
|
||||
mHybridData = initHybrid(context.javaScriptContextHolder.get(), holder, mScheduler!!)
|
||||
mHybridData = initHybrid(context.javaScriptContextHolder.get(), holder, mScheduler)
|
||||
initializeRuntime()
|
||||
|
||||
Log.i(TAG, "Installing Frame Processor Plugins...")
|
||||
@@ -48,19 +40,18 @@ class FrameProcessorRuntimeManager(context: ReactApplicationContext) {
|
||||
registerPlugin(plugin)
|
||||
}
|
||||
Log.i(TAG, "Successfully installed ${Plugins.count()} Frame Processor Plugins!")
|
||||
HasRegisteredPlugins = true
|
||||
}
|
||||
|
||||
fun destroy() {
|
||||
mScheduler?.deactivate()
|
||||
mHybridData?.resetNative()
|
||||
mScheduler.deactivate()
|
||||
mHybridData.resetNative()
|
||||
}
|
||||
|
||||
@DoNotStrip
|
||||
@Keep
|
||||
fun findCameraViewById(viewId: Int): CameraView {
|
||||
Log.d(TAG, "finding view $viewId...")
|
||||
val view = mContext?.get()?.currentActivity?.findViewById<CameraView>(viewId)
|
||||
val view = mContext.get()?.currentActivity?.findViewById<CameraView>(viewId)
|
||||
Log.d(TAG, "found view $viewId! is null: ${view == null}")
|
||||
return view ?: throw ViewNotFoundError(viewId)
|
||||
}
|
||||
@@ -70,7 +61,7 @@ class FrameProcessorRuntimeManager(context: ReactApplicationContext) {
|
||||
jsContext: Long,
|
||||
jsCallInvokerHolder: CallInvokerHolderImpl,
|
||||
scheduler: Scheduler
|
||||
): HybridData?
|
||||
): HybridData
|
||||
private external fun initializeRuntime()
|
||||
private external fun registerPlugin(plugin: FrameProcessorPlugin)
|
||||
|
||||
|
Reference in New Issue
Block a user