Skip to content

Commit 8cd90b1

Browse files
authored
fix(messaging): Revert "feat(messaging): use FlutterEngineGroup to improve performance of background handlers"
This reverts commit 2e9deac.
1 parent 4c72b54 commit 8cd90b1

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

packages/firebase_messaging/firebase_messaging/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingBackgroundExecutor.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import androidx.annotation.NonNull;
1515
import com.google.firebase.messaging.RemoteMessage;
1616
import io.flutter.embedding.engine.FlutterEngine;
17-
import io.flutter.embedding.engine.FlutterEngineGroup;
17+
import io.flutter.embedding.engine.FlutterShellArgs;
1818
import io.flutter.embedding.engine.dart.DartExecutor;
1919
import io.flutter.embedding.engine.dart.DartExecutor.DartCallback;
2020
import io.flutter.embedding.engine.loader.FlutterLoader;
@@ -24,6 +24,7 @@
2424
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
2525
import io.flutter.plugin.common.MethodChannel.Result;
2626
import io.flutter.view.FlutterCallbackInformation;
27+
import java.util.Arrays;
2728
import java.util.HashMap;
2829
import java.util.Map;
2930
import java.util.concurrent.CountDownLatch;
@@ -114,7 +115,7 @@ public void startBackgroundIsolate() {
114115
if (isNotRunning()) {
115116
long callbackHandle = getPluginCallbackHandle();
116117
if (callbackHandle != 0) {
117-
startBackgroundIsolate(callbackHandle);
118+
startBackgroundIsolate(callbackHandle, null);
118119
}
119120
}
120121
}
@@ -137,7 +138,7 @@ public void startBackgroundIsolate() {
137138
* handle does not resolve to a Dart callback then this method does nothing.
138139
* </ul>
139140
*/
140-
public void startBackgroundIsolate(long callbackHandle) {
141+
public void startBackgroundIsolate(long callbackHandle, FlutterShellArgs shellArgs) {
141142
if (backgroundFlutterEngine != null) {
142143
Log.e(TAG, "Background isolate already started.");
143144
return;
@@ -156,10 +157,19 @@ public void startBackgroundIsolate(long callbackHandle) {
156157
String appBundlePath = loader.findAppBundlePath();
157158
AssetManager assets = ContextHolder.getApplicationContext().getAssets();
158159
if (isNotRunning()) {
159-
Log.i(TAG, "Creating background FlutterEngine instance.");
160-
backgroundFlutterEngine =
161-
new FlutterEngineGroup(ContextHolder.getApplicationContext())
162-
.createAndRunDefaultEngine(ContextHolder.getApplicationContext());
160+
if (shellArgs != null) {
161+
Log.i(
162+
TAG,
163+
"Creating background FlutterEngine instance, with args: "
164+
+ Arrays.toString(shellArgs.toArray()));
165+
backgroundFlutterEngine =
166+
new FlutterEngine(
167+
ContextHolder.getApplicationContext(), shellArgs.toArray());
168+
} else {
169+
Log.i(TAG, "Creating background FlutterEngine instance.");
170+
backgroundFlutterEngine =
171+
new FlutterEngine(ContextHolder.getApplicationContext());
172+
}
163173
// We need to create an instance of `FlutterEngine` before looking up the
164174
// callback. If we don't, the callback cache won't be initialized and the
165175
// lookup will fail.

packages/firebase_messaging/firebase_messaging/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingBackgroundService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.util.Log;
1111
import androidx.annotation.NonNull;
1212
import com.google.firebase.messaging.RemoteMessage;
13+
import io.flutter.embedding.engine.FlutterShellArgs;
1314
import java.util.Collections;
1415
import java.util.LinkedList;
1516
import java.util.List;
@@ -51,13 +52,13 @@ public static void enqueueMessageProcessing(Context context, Intent messageInten
5152
* </ul>
5253
*/
5354
@SuppressWarnings("JavadocReference")
54-
public static void startBackgroundIsolate(long callbackHandle) {
55+
public static void startBackgroundIsolate(long callbackHandle, FlutterShellArgs shellArgs) {
5556
if (flutterBackgroundExecutor != null) {
5657
Log.w(TAG, "Attempted to start a duplicate background isolate. Returning...");
5758
return;
5859
}
5960
flutterBackgroundExecutor = new FlutterFirebaseMessagingBackgroundExecutor();
60-
flutterBackgroundExecutor.startBackgroundIsolate(callbackHandle);
61+
flutterBackgroundExecutor.startBackgroundIsolate(callbackHandle, shellArgs);
6162
}
6263

6364
/**

packages/firebase_messaging/firebase_messaging/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingPlugin.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.firebase.FirebaseApp;
2626
import com.google.firebase.messaging.FirebaseMessaging;
2727
import com.google.firebase.messaging.RemoteMessage;
28+
import io.flutter.embedding.engine.FlutterShellArgs;
2829
import io.flutter.embedding.engine.plugins.FlutterPlugin;
2930
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
3031
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
@@ -429,9 +430,19 @@ public void onMethodCall(final MethodCall call, @NonNull final Result result) {
429430
userCallbackHandle = Long.valueOf((Integer) arg2);
430431
}
431432

433+
FlutterShellArgs shellArgs = null;
434+
if (mainActivity != null) {
435+
// Supports both Flutter Activity types:
436+
// io.flutter.embedding.android.FlutterFragmentActivity
437+
// io.flutter.embedding.android.FlutterActivity
438+
// We could use `getFlutterShellArgs()` but this is only available on `FlutterActivity`.
439+
shellArgs = FlutterShellArgs.fromIntent(mainActivity.getIntent());
440+
}
441+
432442
FlutterFirebaseMessagingBackgroundService.setCallbackDispatcher(pluginCallbackHandle);
433443
FlutterFirebaseMessagingBackgroundService.setUserCallbackHandle(userCallbackHandle);
434-
FlutterFirebaseMessagingBackgroundService.startBackgroundIsolate(pluginCallbackHandle);
444+
FlutterFirebaseMessagingBackgroundService.startBackgroundIsolate(
445+
pluginCallbackHandle, shellArgs);
435446
methodCallTask = Tasks.forResult(null);
436447
break;
437448
case "Messaging#getInitialMessage":

0 commit comments

Comments
 (0)