From 89a753c50ab542ac1d2aa5f88cc828221f2e00ba Mon Sep 17 00:00:00 2001 From: shifujun Date: Wed, 14 Jul 2021 11:22:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(core.runtime):=20notifyPluginActivityPreCre?= =?UTF-8?q?ated=E6=97=B6=E5=85=88=E5=A4=8D=E5=88=B6=E4=B8=80=E4=BB=BDcallb?= =?UTF-8?q?ack=E5=86=8Dfor-each?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix #560 --- .../ShadowActivityLifecycleCallbacks.java | 19 +++++++++---------- .../lib/gallery/TestApplication.java | 10 ++++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivityLifecycleCallbacks.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivityLifecycleCallbacks.java index 0443af149..bb1613a39 100644 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivityLifecycleCallbacks.java +++ b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/ShadowActivityLifecycleCallbacks.java @@ -427,16 +427,15 @@ public void unregisterActivityLifecycleCallbacks( public static void notifyPluginActivityPreCreated(ShadowActivity pluginActivity, Bundle savedInstanceState) { synchronized (sAllHolders) { - for (Holder holder : sAllHolders) { - holder.onPluginActivityPreCreated(pluginActivity, savedInstanceState); - } - } - } - - private void onPluginActivityPreCreated(ShadowActivity pluginActivity, Bundle savedInstanceState) { - synchronized (sAllHolders) { - for (ShadowActivityLifecycleCallbacks.Wrapper wrapper : mActivityLifecycleCallbacksMap.values()) { - wrapper.onPluginActivityPreCreated(pluginActivity, savedInstanceState); + //onPluginActivityPreCreated中可能会再次调用registerActivityLifecycleCallbacks, + //进而修改sAllHolders和mActivityLifecycleCallbacksMap, + //因此需要先复制出待通知的callback,再通知。 + Holder[] holders = sAllHolders.toArray(new Holder[0]); + for (Holder holder : holders) { + Wrapper[] wrappers = holder.mActivityLifecycleCallbacksMap.values().toArray(new Wrapper[0]); + for (ShadowActivityLifecycleCallbacks.Wrapper wrapper : wrappers) { + wrapper.onPluginActivityPreCreated(pluginActivity, savedInstanceState); + } } } } diff --git a/projects/test/plugin/general-cases/general-cases-lib/src/main/java/com/tencent/shadow/test/plugin/general_cases/lib/gallery/TestApplication.java b/projects/test/plugin/general-cases/general-cases-lib/src/main/java/com/tencent/shadow/test/plugin/general_cases/lib/gallery/TestApplication.java index c9bca2f9b..67fe26304 100644 --- a/projects/test/plugin/general-cases/general-cases-lib/src/main/java/com/tencent/shadow/test/plugin/general_cases/lib/gallery/TestApplication.java +++ b/projects/test/plugin/general-cases/general-cases-lib/src/main/java/com/tencent/shadow/test/plugin/general_cases/lib/gallery/TestApplication.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.app.Application; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -43,6 +44,9 @@ public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(alc); + + //额外添加一个callback,构造通知遍历多个callback的场景 + registerActivityLifecycleCallbacks(new TestActivityLifecycleCallbacks("TestForRegisterInPreCreatedCallback")); } public static TestApplication getInstance() { @@ -71,6 +75,12 @@ public void onActivityPreCreated(@NonNull Activity activity, @Nullable Bundle sa if (isTargetActivity(activity)) { recordList.add("onActivityPreCreated"); } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + TestApplication.getInstance().registerActivityLifecycleCallbacks( + new TestActivityLifecycleCallbacks("TestForRegisterInPreCreatedCallback") + ); + } } @Override