Skip to content

Commit

Permalink
fix(core.runtime): notifyPluginActivityPreCreated时先复制一份callback再for-each
Browse files Browse the repository at this point in the history
fix #560
  • Loading branch information
shifujun committed Jul 14, 2021
1 parent e66e0bb commit 89a753c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -43,6 +44,9 @@ public void onCreate() {
super.onCreate();

registerActivityLifecycleCallbacks(alc);

//额外添加一个callback,构造通知遍历多个callback的场景
registerActivityLifecycleCallbacks(new TestActivityLifecycleCallbacks("TestForRegisterInPreCreatedCallback"));
}

public static TestApplication getInstance() {
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 89a753c

Please sign in to comment.