Skip to content

Commit 0800da1

Browse files
authored
[Android] 代码重构 (alibaba#1270)
* 1. 解决重复调用onPause导致的空针异常(alibaba#1269) * 2. ActivityAndFragmentPatch存在的必要性不大,暂时删除
1 parent 92565ba commit 0800da1

File tree

6 files changed

+51
-84
lines changed

6 files changed

+51
-84
lines changed

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

Lines changed: 0 additions & 63 deletions
This file was deleted.

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void onResume() {
7272
attachToActivity();
7373
FlutterBoost.instance().getPlugin().onContainerAppeared(this);
7474
assert (flutterView != null);
75-
ActivityAndFragmentPatch.onResumeAttachToFlutterEngine(flutterView, getFlutterEngine());
75+
flutterView.attachToFlutterEngine(getFlutterEngine());
7676
if (DEBUG) Log.e(TAG, "#onResume: " + this);
7777
}
7878

@@ -97,7 +97,7 @@ protected void onPause() {
9797

9898
FlutterBoost.instance().getPlugin().onContainerDisappeared(this);
9999
assert (flutterView != null);
100-
ActivityAndFragmentPatch.onPauseDetachFromFlutterEngine(flutterView, getFlutterEngine());
100+
flutterView.detachFromFlutterEngine();
101101
detachFromActivity();
102102
platformPlugin.destroy();
103103
platformPlugin = null;
@@ -143,12 +143,14 @@ public boolean shouldAttachEngineToActivity() {
143143

144144
@Override
145145
public void onBackPressed() {
146-
ActivityAndFragmentPatch.onBackPressed();
146+
// Intercept the user's press of the back key.
147+
FlutterBoost.instance().getPlugin().popRoute(null, null);
147148
}
148149

149150
@Override
150151
public RenderMode getRenderMode() {
151-
return ActivityAndFragmentPatch.getRenderMode();
152+
// Default to |FlutterTextureView|.
153+
return RenderMode.texture;
152154
}
153155

154156
@Override

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
5757
View view = super.onCreateView(inflater, container, savedInstanceState);
5858
flutterView = FlutterBoostUtils.findFlutterView(view);
5959
assert(flutterView != null);
60+
// Detach FlutterView from engine before |onResume|.
6061
flutterView.detachFromFlutterEngine();
6162
if (DEBUG) Log.e(TAG, "#onCreateView: " + this);
6263
return view;
@@ -98,7 +99,8 @@ public void onResume() {
9899

99100
@Override
100101
public RenderMode getRenderMode() {
101-
return ActivityAndFragmentPatch.getRenderMode();
102+
// Default to |FlutterTextureView|.
103+
return RenderMode.texture;
102104
}
103105

104106
@Override
@@ -135,7 +137,8 @@ public void onDetach() {
135137

136138
@Override
137139
public void onBackPressed() {
138-
ActivityAndFragmentPatch.onBackPressed();
140+
// Intercept the user's press of the back key.
141+
FlutterBoost.instance().getPlugin().popRoute(null, null);
139142
}
140143

141144
@Override
@@ -198,20 +201,34 @@ public String getCachedEngineId() {
198201
}
199202

200203
private void didFragmentShow() {
201-
platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
202204
FlutterBoost.instance().getPlugin().onContainerAppeared(this);
203-
// Attache plugins to the activity.
205+
206+
// Create the platform plugin.
207+
if (platformPlugin == null) {
208+
platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
209+
}
210+
211+
// Attach plugins to the activity.
204212
getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getActivity().getLifecycle());
205-
ActivityAndFragmentPatch.onResumeAttachToFlutterEngine(flutterView, getFlutterEngine());
213+
214+
// Attach rendering pipeline.
215+
flutterView.attachToFlutterEngine(getFlutterEngine());
206216
}
207217

208218
private void didFragmentHide() {
209219
FlutterBoost.instance().getPlugin().onContainerDisappeared(this);
210-
ActivityAndFragmentPatch.onPauseDetachFromFlutterEngine(flutterView, getFlutterEngine());
220+
211221
// Plugins are no longer attached to the activity.
212222
getFlutterEngine().getActivityControlSurface().detachFromActivity();
213-
platformPlugin.destroy();
214-
platformPlugin = null;
223+
224+
// Release Flutter's control of UI such as system chrome.
225+
if (platformPlugin != null) {
226+
platformPlugin.destroy();
227+
platformPlugin = null;
228+
}
229+
230+
// Detach rendering pipeline.
231+
flutterView.detachFromFlutterEngine();
215232
}
216233

217234
public static class CachedEngineFragmentBuilder {

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.idlefish.flutterboost.containers;
22

33
import java.util.HashMap;
4-
import java.util.LinkedHashMap;
54
import java.util.LinkedList;
6-
import java.util.List;
75
import java.util.Map;
86

7+
import io.flutter.Log;
8+
99
public class FlutterContainerManager {
10+
private static final String TAG = "FlutterContainerManager";
11+
private static final boolean DEBUG = false;
1012

1113
private FlutterContainerManager() {
1214
}
@@ -24,7 +26,7 @@ public static FlutterContainerManager instance() {
2426

2527
public void addContainer(String uniqueId, FlutterViewContainer container) {
2628
allContainers.put(uniqueId, container);
27-
29+
if (DEBUG) Log.e(TAG, "#addContainer:" + toString());
2830
}
2931

3032
public void activateContainer(String uniqueId, FlutterViewContainer container) {
@@ -35,12 +37,14 @@ public void activateContainer(String uniqueId, FlutterViewContainer container) {
3537
activeContainers.remove(container);
3638
}
3739
activeContainers.add(container);
40+
if (DEBUG) Log.e(TAG, "#activateContainer:" + toString());
3841
}
3942

4043
public void removeContainer(String uniqueId) {
4144
if (uniqueId == null) return;
4245
FlutterViewContainer container = allContainers.remove(uniqueId);
4346
activeContainers.remove(container);
47+
if (DEBUG) Log.e(TAG, "#removeContainer:" + toString());
4448
}
4549

4650

@@ -69,4 +73,12 @@ public boolean isTopContainer(String uniqueId) {
6973
public int getContainerSize() {
7074
return allContainers.size();
7175
}
76+
77+
public String toString() {
78+
StringBuilder sb = new StringBuilder();
79+
sb.append("activeContainers=" + activeContainers.size() + ", [");
80+
activeContainers.forEach((value) -> sb.append(value.getUrl() + ','));
81+
sb.append("]");
82+
return sb.toString();
83+
}
7284
}

example/android/app/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostView.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ public void onResume() {
131131
}
132132
super.onResume();
133133
FlutterBoost.instance().getPlugin().onContainerAppeared(this);
134-
ActivityAndFragmentPatch.onResumeAttachToFlutterEngine(flutterView(), getFlutterEngine());
134+
flutterView().attachToFlutterEngine(getFlutterEngine());
135135
getFlutterEngine().getLifecycleChannel().appIsResumed();
136136
}
137137

138138
@Override
139139
public void onPause() {
140140
if(hasDestroyed()) return;
141141
super.onPause();
142-
ActivityAndFragmentPatch.onPauseDetachFromFlutterEngine(flutterView(), getFlutterEngine());
142+
flutterView().detachFromFlutterEngine();
143143
getFlutterEngine().getLifecycleChannel().appIsResumed();
144144
}
145145

@@ -169,15 +169,15 @@ public void setVisibility(int visibility) {
169169

170170
if (getVisibility() == View.VISIBLE) {
171171
FlutterBoost.instance().getPlugin().onContainerAppeared(this);
172-
ActivityAndFragmentPatch.onResumeAttachToFlutterEngine(flutterView(), getFlutterEngine());
172+
flutterView().attachToFlutterEngine(getFlutterEngine());
173173
} else if (getVisibility() == View.GONE) {
174174
FlutterBoost.instance().getPlugin().onContainerDisappeared(this);
175-
ActivityAndFragmentPatch.onPauseDetachFromFlutterEngine(flutterView(), getFlutterEngine());
175+
flutterView().detachFromFlutterEngine();
176176
}
177177
}
178178

179179
public void onBackPressed() {
180-
ActivityAndFragmentPatch.onBackPressed();
180+
FlutterBoost.instance().getPlugin().popRoute(null, null);
181181
}
182182

183183
@Override

example/android/app/src/main/java/com/idlefish/flutterboost/example/tab/TabMainActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import androidx.fragment.app.FragmentTransaction;
1212

1313
import com.idlefish.flutterboost.FlutterBoost;
14-
import com.idlefish.flutterboost.containers.ActivityAndFragmentPatch;
1514
import com.idlefish.flutterboost.containers.FlutterBoostFragment;
1615
import com.idlefish.flutterboost.example.R;
1716

0 commit comments

Comments
 (0)