diff --git a/package/android/cpp/jni/JniSkiaDrawView.cpp b/package/android/cpp/jni/JniSkiaDrawView.cpp index a1423c9d46..e75855e2ff 100644 --- a/package/android/cpp/jni/JniSkiaDrawView.cpp +++ b/package/android/cpp/jni/JniSkiaDrawView.cpp @@ -251,7 +251,9 @@ namespace RNSkia return false; } - if (!_skRenderTarget.isValid() || _prevWidth != _width || + if (_skSurface == nullptr || + !_skRenderTarget.isValid() || + _prevWidth != _width || _prevHeight != _height) { RNSkMeasureTime measure = diff --git a/package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaViewManager.java b/package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaViewManager.java index a523451935..6ed1bd76ea 100644 --- a/package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaViewManager.java +++ b/package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaViewManager.java @@ -1,6 +1,5 @@ package com.shopify.reactnative.skia; -import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; import com.facebook.react.uimanager.BaseViewManager; import com.facebook.react.uimanager.LayoutShadowNode; @@ -10,10 +9,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import java.util.HashMap; + public class RNSkiaViewManager extends BaseViewManager { - private SkiaDrawView mView; - private int mNativeId; + final private HashMap mViewMapping = new HashMap(); @NonNull @Override @@ -38,9 +38,10 @@ public void updateExtraData(SkiaDrawView root, Object extraData) { @Override public void setNativeId(@NonNull SkiaDrawView view, @Nullable String nativeId) { super.setNativeId(view, nativeId); - mNativeId = Integer.parseInt(nativeId); - RNSkiaModule skiaModule = ((ReactContext)mView.getContext()).getNativeModule(RNSkiaModule.class); - skiaModule.getSkiaManager().register(mNativeId, mView); + int nativeIdResolved = Integer.parseInt(nativeId); + RNSkiaModule skiaModule = ((ReactContext)view.getContext()).getNativeModule(RNSkiaModule.class); + skiaModule.getSkiaManager().register(nativeIdResolved, view); + mViewMapping.put(view, nativeIdResolved); } @ReactProp(name = "mode") @@ -57,14 +58,15 @@ public void setDebug(SkiaDrawView view, boolean show) { public void onDropViewInstance(@NonNull SkiaDrawView view) { super.onDropViewInstance(view); RNSkiaModule skiaModule = ((ReactContext)view.getContext()).getNativeModule(RNSkiaModule.class); - skiaModule.getSkiaManager().unregister(mNativeId); + Integer nativeId = mViewMapping.get(view); + skiaModule.getSkiaManager().unregister(nativeId); + mViewMapping.remove(view); view.onRemoved(); } @NonNull @Override protected SkiaDrawView createViewInstance(@NonNull ThemedReactContext reactContext) { - mView = new SkiaDrawView(reactContext); - return mView; + return new SkiaDrawView(reactContext); } } \ No newline at end of file diff --git a/package/cpp/rnskia/RNSkDrawView.cpp b/package/cpp/rnskia/RNSkDrawView.cpp index 6f0aff6dfd..7206069e29 100644 --- a/package/cpp/rnskia/RNSkDrawView.cpp +++ b/package/cpp/rnskia/RNSkDrawView.cpp @@ -134,6 +134,10 @@ void RNSkDrawView::drawInSurface(sk_sp surface, int width, std::shared_ptr context) { try { + if(getIsRemoved()) { + return; + } + // Get the canvas auto skCanvas = surface->getCanvas(); _jsiCanvas->setCanvas(skCanvas);