From d4c6257408d42e71865d8accde334c0f337d44fc Mon Sep 17 00:00:00 2001 From: maxli Date: Thu, 28 Apr 2022 18:06:54 +0800 Subject: [PATCH] fix(android): call update root size when reload in debug mode --- .../mtt/hippy/HippyEngineManagerImpl.java | 5 ++ .../tencent/mtt/hippy/example/MyActivity.java | 2 +- .../com/tencent/link_supplier/Linker.java | 57 +++++++++---------- .../proxy/renderer/NativeRenderProxy.java | 5 ++ .../com/tencent/renderer/NativeRenderer.java | 16 ++++++ 5 files changed, 53 insertions(+), 32 deletions(-) diff --git a/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java b/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java index 420a2a598..ce095f478 100644 --- a/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java +++ b/framework/js/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java @@ -39,6 +39,7 @@ import com.tencent.link_supplier.proxy.framework.ImageLoaderAdapter; import com.tencent.link_supplier.proxy.framework.JSFrameworkProxy; import com.tencent.link_supplier.proxy.renderer.ControllerProvider; import com.tencent.link_supplier.proxy.renderer.NativeRenderProxy; +import com.tencent.link_supplier.proxy.renderer.RenderProxy; import com.tencent.mtt.hippy.adapter.device.HippyDeviceAdapter; import com.tencent.mtt.hippy.adapter.monitor.HippyEngineMonitorAdapter; import com.tencent.mtt.hippy.adapter.thirdparty.HippyThirdPartyAdapter; @@ -796,6 +797,10 @@ public abstract class HippyEngineManagerImpl extends HippyEngineManager implemen // Call linker to bind framework until get v8 runtime id after js bridge initialized, // and use v8 runtime id to represent framework id. mLinkHelper.bind((int) runtimeId); + RenderProxy renderProxy = mLinkHelper.getRenderer(); + if (renderProxy instanceof NativeRenderProxy) { + ((NativeRenderProxy) renderProxy).onJSBridgeInitialized(); + } } @Override diff --git a/framework/js/examples/android-demo/src/main/java/com/tencent/mtt/hippy/example/MyActivity.java b/framework/js/examples/android-demo/src/main/java/com/tencent/mtt/hippy/example/MyActivity.java index c0ed9e077..6723a65dc 100644 --- a/framework/js/examples/android-demo/src/main/java/com/tencent/mtt/hippy/example/MyActivity.java +++ b/framework/js/examples/android-demo/src/main/java/com/tencent/mtt/hippy/example/MyActivity.java @@ -47,7 +47,7 @@ public class MyActivity extends Activity initParams.imageLoader = new MyImageLoader(this.getApplicationContext()); initParams.debugServerHost = "localhost:38989"; // 可选:是否设置为debug模式,默认为false。调试模式下,所有jsbundle都是从debug server上下载 - initParams.debugMode = false; + initParams.debugMode = true; // 可选:是否打印引擎的完整的log。默认为false initParams.enableLog = true; // 可选:debugMode = false 时必须设置coreJSAssetsPath或coreJSFilePath(debugMode = true时,所有jsbundle都是从debug server上下载) diff --git a/modules/link_supplier/src/main/java/com/tencent/link_supplier/Linker.java b/modules/link_supplier/src/main/java/com/tencent/link_supplier/Linker.java index 5a02cbf2e..6cebfb5ce 100644 --- a/modules/link_supplier/src/main/java/com/tencent/link_supplier/Linker.java +++ b/modules/link_supplier/src/main/java/com/tencent/link_supplier/Linker.java @@ -24,11 +24,12 @@ import com.tencent.link_supplier.proxy.renderer.RenderProxy; import java.util.concurrent.atomic.AtomicInteger; public class Linker implements LinkHelper { + private static final int ROOT_VIEW_ID_INCREMENT = 10; private static final AtomicInteger sRootIdCounter = new AtomicInteger(0); private RenderProxy mRenderProxy; private DomProxy mDomProxy; - private AnimationManagerProxy mAniManagerProx; + private AnimationManagerProxy mAniManagerProxy; private final int mRootId; public Linker() { @@ -55,13 +56,13 @@ public class Linker implements LinkHelper { @Override public void createAnimationManager() { - if (mAniManagerProx == null && mDomProxy != null) { - mAniManagerProx = new AnimationManagerProxy(mDomProxy.getInstanceId()); - } + if (mAniManagerProxy == null && mDomProxy != null) { + mAniManagerProxy = new AnimationManagerProxy(mDomProxy.getInstanceId()); + } } - @Override + @Override public void createDomHolder(int instanceId) { if (mDomProxy == null) { mDomProxy = new DomHolder(instanceId); @@ -105,7 +106,7 @@ public class Linker implements LinkHelper { @Override public void updateAnimationNode(byte[] params, int offset, int length) { - updateAnimationNode(mAniManagerProx.getInstanceId(), params, offset, length); + updateAnimationNode(mAniManagerProxy.getInstanceId(), params, offset, length); } @Override @@ -114,9 +115,9 @@ public class Linker implements LinkHelper { mDomProxy.destroy(); mDomProxy = null; } - if (mAniManagerProx != null) { - mAniManagerProx.destroy(); - mAniManagerProx = null; + if (mAniManagerProxy != null) { + mAniManagerProxy.destroy(); + mAniManagerProxy = null; } if (mRenderProxy != null) { mRenderProxy.destroy(); @@ -152,21 +153,22 @@ public class Linker implements LinkHelper { } private class AnimationManagerProxy implements LinkProxy { - private final int mInstanceId; - public AnimationManagerProxy(int domId) { - mInstanceId = createAnimationManager(domId); - } + private final int mInstanceId; - @Override - public int getInstanceId() { - return mInstanceId; - } + public AnimationManagerProxy(int domId) { + mInstanceId = createAnimationManager(domId); + } - @Override - public void destroy() { - destroyAnimationManager(mInstanceId); - } + @Override + public int getInstanceId() { + return mInstanceId; + } + + @Override + public void destroy() { + destroyAnimationManager(mInstanceId); + } } private RenderProxy createNativeRenderer() { @@ -220,17 +222,10 @@ public class Linker implements LinkHelper { private native void doBind(int domId, int renderId, int frameworkId); /** - * Update node property on animation update, params buffer format: - * [ - * { - * animationId: - * nodeId: - * animationKey: - * animationValue: - * } - * ] + * Update node property on animation update, params buffer format: [ { animationId: nodeId: + * animationKey: animationValue: } ] * - * @param domId dom manager instance id + * @param aniId dom manager instance id * @param params params buffer encoded by serializer * @param offset start position of params buffer * @param length available total length of params buffer diff --git a/modules/link_supplier/src/main/java/com/tencent/link_supplier/proxy/renderer/NativeRenderProxy.java b/modules/link_supplier/src/main/java/com/tencent/link_supplier/proxy/renderer/NativeRenderProxy.java index 7789fc399..aed686b15 100644 --- a/modules/link_supplier/src/main/java/com/tencent/link_supplier/proxy/renderer/NativeRenderProxy.java +++ b/modules/link_supplier/src/main/java/com/tencent/link_supplier/proxy/renderer/NativeRenderProxy.java @@ -22,4 +22,9 @@ public interface NativeRenderProxy extends RenderProxy { * Notify renderer the root view instance delete by framework. */ void onRootDestroy(); + + /** + * Notify renderer the js bridger has been initialized. + */ + void onJSBridgeInitialized(); } diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java b/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java index 50c55fc12..8e4c98b66 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java @@ -228,6 +228,22 @@ public class NativeRenderer extends Renderer implements NativeRender, NativeRend } } + @Override + public void onJSBridgeInitialized() { + UIThreadUtils.runOnUiThread(new Runnable() { + @Override + public void run() { + if (mRootView != null) { + final int width = mRootView.getWidth(); + final int height = mRootView.getHeight(); + if (width > 0 && height > 0) { + onSizeChanged(width, height); + } + } + } + }); + } + @Override public void onSizeChanged(int w, int h) { mRenderProvider.onSizeChanged(w, h);