Skip to content

Commit 92565ba

Browse files
authored
[Android] 解决FlutterBoostFragment场景下实现了ActivityAware接口的插件不能正常工作的问题 (alibaba#1267)
* [Android] 适配页面透明参数,增加测试案例 * [Android] 解决FlutterBoostFragment场景下实现了ActivityAware接口的插件不能正常工作的问题
1 parent b425e23 commit 92565ba

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
public class FlutterBoostActivity extends FlutterActivity implements FlutterViewContainer {
3434
private static final String TAG = "FlutterBoostActivity";
35+
private static final boolean DEBUG = false;
3536
private final String who = UUID.randomUUID().toString();
3637
private FlutterView flutterView;
3738
private PlatformPlugin platformPlugin;
@@ -42,6 +43,7 @@ protected void onCreate(Bundle savedInstanceState) {
4243
super.onCreate(savedInstanceState);
4344
flutterView = FlutterBoostUtils.findFlutterView(getWindow().getDecorView());
4445
FlutterBoost.instance().getPlugin().onContainerCreated(this);
46+
if (DEBUG) Log.e(TAG, "#onCreate: " + this);
4547
}
4648

4749
// @Override
@@ -71,12 +73,14 @@ public void onResume() {
7173
FlutterBoost.instance().getPlugin().onContainerAppeared(this);
7274
assert (flutterView != null);
7375
ActivityAndFragmentPatch.onResumeAttachToFlutterEngine(flutterView, getFlutterEngine());
76+
if (DEBUG) Log.e(TAG, "#onResume: " + this);
7477
}
7578

7679
@Override
7780
protected void onStop() {
7881
super.onStop();
7982
getFlutterEngine().getLifecycleChannel().appIsResumed();
83+
if (DEBUG) Log.e(TAG, "#onStop: " + this);
8084
}
8185

8286
@Override
@@ -98,6 +102,7 @@ protected void onPause() {
98102
platformPlugin.destroy();
99103
platformPlugin = null;
100104
getFlutterEngine().getLifecycleChannel().appIsResumed();
105+
if (DEBUG) Log.e(TAG, "#onPause: " + this);
101106
}
102107

103108
@Override
@@ -107,6 +112,7 @@ protected void onDestroy() {
107112
super.onDestroy();
108113
engine.getLifecycleChannel().appIsResumed();
109114
FlutterBoost.instance().getPlugin().onContainerDestroyed(this);
115+
if (DEBUG) Log.e(TAG, "#onDestroy: " + this);
110116
}
111117

112118
@Override
@@ -192,6 +198,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
192198
// lifecycle is onActivityResult->onResume
193199
attachToActivity();
194200
super.onActivityResult(requestCode, resultCode, data);
201+
if (DEBUG) Log.e(TAG, "#onActivityResult: " + this);
195202
}
196203

197204
private void attachToActivity() {

android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Map;
1616
import java.util.UUID;
1717

18+
import io.flutter.Log;
1819
import io.flutter.embedding.android.FlutterFragment;
1920
import io.flutter.embedding.android.FlutterView;
2021
import io.flutter.embedding.android.RenderMode;
@@ -28,6 +29,8 @@
2829
import static com.idlefish.flutterboost.containers.FlutterActivityLaunchConfigs.EXTRA_URL_PARAM;
2930

3031
public class FlutterBoostFragment extends FlutterFragment implements FlutterViewContainer {
32+
private static final String TAG = "FlutterBoostFragment";
33+
private static final boolean DEBUG = false;
3134
private final String who = UUID.randomUUID().toString();
3235
private FlutterView flutterView;
3336
private PlatformPlugin platformPlugin;
@@ -45,6 +48,7 @@ public void detachFromFlutterEngine() {
4548
@Override
4649
public void onAttach(Context context) {
4750
super.onAttach(context);
51+
if (DEBUG) Log.e(TAG, "#onAttach: " + this);
4852
}
4953

5054
@Override
@@ -54,6 +58,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
5458
flutterView = FlutterBoostUtils.findFlutterView(view);
5559
assert(flutterView != null);
5660
flutterView.detachFromFlutterEngine();
61+
if (DEBUG) Log.e(TAG, "#onCreateView: " + this);
5762
return view;
5863
}
5964

@@ -66,6 +71,7 @@ public void onHiddenChanged(boolean hidden) {
6671
didFragmentShow();
6772
}
6873
super.onHiddenChanged(hidden);
74+
if (DEBUG) Log.e(TAG, "#onHiddenChanged: hidden=" + hidden + ", " + this);
6975
}
7076

7177
@Override
@@ -77,6 +83,7 @@ public void setUserVisibleHint(boolean isVisibleToUser) {
7783
didFragmentHide();
7884
}
7985
super.setUserVisibleHint(isVisibleToUser);
86+
if (DEBUG) Log.e(TAG, "#setUserVisibleHint: isVisibleToUser=" + isVisibleToUser + ", " + this);
8087
}
8188

8289
@Override
@@ -86,6 +93,7 @@ public void onResume() {
8693
didFragmentShow();
8794
getFlutterEngine().getLifecycleChannel().appIsResumed();
8895
}
96+
if (DEBUG) Log.e(TAG, "#onResume: " + this);
8997
}
9098

9199
@Override
@@ -98,19 +106,22 @@ public void onPause() {
98106
super.onPause();
99107
didFragmentHide();
100108
getFlutterEngine().getLifecycleChannel().appIsResumed();
109+
if (DEBUG) Log.e(TAG, "#onPause: " + this);
101110
}
102111

103112
@Override
104113
public void onStop() {
105114
super.onStop();
106115
assert(getFlutterEngine() != null);
107116
getFlutterEngine().getLifecycleChannel().appIsResumed();
117+
if (DEBUG) Log.e(TAG, "#onStop: " + this);
108118
}
109119

110120
@Override
111121
public void onDestroyView() {
112122
super.onDestroyView();
113123
FlutterBoost.instance().getPlugin().onContainerDestroyed(this);
124+
if (DEBUG) Log.e(TAG, "#onDestroyView: " + this);
114125
}
115126

116127
@Override
@@ -119,6 +130,7 @@ public void onDetach() {
119130
super.onDetach();
120131
assert(engine != null);
121132
engine.getLifecycleChannel().appIsResumed();
133+
if (DEBUG) Log.e(TAG, "#onDetach: " + this);
122134
}
123135

124136
@Override
@@ -188,12 +200,16 @@ public String getCachedEngineId() {
188200
private void didFragmentShow() {
189201
platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
190202
FlutterBoost.instance().getPlugin().onContainerAppeared(this);
203+
// Attache plugins to the activity.
204+
getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getActivity().getLifecycle());
191205
ActivityAndFragmentPatch.onResumeAttachToFlutterEngine(flutterView, getFlutterEngine());
192206
}
193207

194208
private void didFragmentHide() {
195209
FlutterBoost.instance().getPlugin().onContainerDisappeared(this);
196210
ActivityAndFragmentPatch.onPauseDetachFromFlutterEngine(flutterView, getFlutterEngine());
211+
// Plugins are no longer attached to the activity.
212+
getFlutterEngine().getActivityControlSurface().detachFromActivity();
197213
platformPlugin.destroy();
198214
platformPlugin = null;
199215
}

example/android/app/src/main/java/com/idlefish/flutterboost/example/MyFlutterBoostDelegate.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@
77
import com.idlefish.flutterboost.FlutterBoostRouteOptions;
88
import com.idlefish.flutterboost.containers.FlutterBoostActivity;
99

10-
import java.util.Map;
11-
12-
import io.flutter.embedding.android.FlutterActivityLaunchConfigs;
13-
import com.idlefish.flutterboost.FlutterBoostDelegate;
14-
1510
public class MyFlutterBoostDelegate implements FlutterBoostDelegate {
1611

1712
@Override
@@ -24,11 +19,11 @@ public void pushNativeRoute(FlutterBoostRouteOptions options) {
2419
public void pushFlutterRoute(FlutterBoostRouteOptions options) {
2520
Class<? extends FlutterBoostActivity> activityClass = options.opaque() ? FlutterBoostActivity.class : TransparencyPageActivity.class;
2621
Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(activityClass)
27-
.destroyEngineWithActivity(false)
28-
.uniqueId(options.uniqueId())
29-
.url(options.pageName())
30-
.urlParams(options.arguments())
31-
.build(FlutterBoost.instance().currentActivity());
22+
.destroyEngineWithActivity(false)
23+
.uniqueId(options.uniqueId())
24+
.url(options.pageName())
25+
.urlParams(options.arguments())
26+
.build(FlutterBoost.instance().currentActivity());
3227
FlutterBoost.instance().currentActivity().startActivity(intent);
3328
}
3429
}

0 commit comments

Comments
 (0)