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