diff --git a/android/src/main/java/com/idlefish/flutterboost/FlutterViewContainerManager.java b/android/src/main/java/com/idlefish/flutterboost/FlutterViewContainerManager.java
index a148ac695d3bce892a171550becbedc141753128..815e14c9f69d38b7c089955f57436a97a457f87d 100755
--- a/android/src/main/java/com/idlefish/flutterboost/FlutterViewContainerManager.java
+++ b/android/src/main/java/com/idlefish/flutterboost/FlutterViewContainerManager.java
@@ -84,6 +84,13 @@ public class FlutterViewContainerManager implements IContainerManager {
     void removeRecord(IContainerRecord record) {
         mRecordStack.remove(record);
         mRecordMap.remove(record.getContainer());
+        if(mRecordStack.empty()){
+            if( NewFlutterBoost.instance().platform().whenEngineDestroy()== NewFlutterBoost.ConfigBuilder.All_FLUTTER_ACTIVITY_DESTROY){
+                NewFlutterBoost.instance().boostDestroy();
+            }
+        }
+
+
     }
 
     void setContainerResult(IContainerRecord record,int requestCode, int resultCode, Map<String,Object> result) {
diff --git a/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java b/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
index 1b19e0d0432444f9aa0cdbb53405104b1f57ed5d..9d67c5f4016c23232dabea579cbd7e4dea204a39 100644
--- a/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
+++ b/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
@@ -10,6 +10,7 @@ import com.idlefish.flutterboost.interfaces.*;
 import io.flutter.Log;
 import io.flutter.embedding.android.FlutterView;
 import io.flutter.embedding.engine.FlutterEngine;
+import io.flutter.embedding.engine.FlutterShellArgs;
 import io.flutter.embedding.engine.dart.DartExecutor;
 import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
 import io.flutter.plugin.common.PluginRegistry;
@@ -23,7 +24,7 @@ public class NewFlutterBoost {
     private Platform mPlatform;
 
     private FlutterViewContainerManager mManager;
-
+    private FlutterEngine mEngine;
     private Activity mCurrentActiveActivity;
     private PluginRegistry mRegistry;
     static NewFlutterBoost sInstance = null;
@@ -53,7 +54,7 @@ public class NewFlutterBoost {
                 if (mPlatform.whenEngineStart() == ConfigBuilder.ANY_ACTIVITY_CREATED) {
                     Log.e("bbbb2", "xxxxx");
 
-                    doInitialFlutter(mPlatform);
+                    doInitialFlutter();
 
                 }
             }
@@ -87,7 +88,7 @@ public class NewFlutterBoost {
                 if (mCurrentActiveActivity == activity) {
                     Debuger.log("Application entry background");
 
-                    if (mPlatform.engineProvider() != null) {
+                    if (engineProvider() != null) {
                         HashMap<String, String> map = new HashMap<>();
                         map.put("type", "background");
                         channel().sendEvent("lifecycle", map);
@@ -106,7 +107,7 @@ public class NewFlutterBoost {
                 if (mCurrentActiveActivity == activity) {
                     Debuger.log("Application entry background");
 
-                    if (mPlatform.engineProvider() != null) {
+                    if (engineProvider() != null) {
                         HashMap<String, String> map = new HashMap<>();
                         map.put("type", "background");
                         channel().sendEvent("lifecycle", map);
@@ -118,19 +119,19 @@ public class NewFlutterBoost {
 
         if (mPlatform.whenEngineStart() == ConfigBuilder.IMMEDIATELY) {
 
-            doInitialFlutter(mPlatform);
+            doInitialFlutter();
         }
 
 
 
     }
 
-    private void doInitialFlutter(Platform platform ) {
+    public void doInitialFlutter() {
 
 
-        if(platform.getEngine()!=null) return;
+        if(mEngine!=null) return;
 
-        FlutterEngine flutterEngine = platform.engineProvider();
+        FlutterEngine flutterEngine = engineProvider();
 
         if (flutterEngine.getDartExecutor().isExecutingDart()) {
             // No warning is logged because this situation will happen on every config
@@ -139,13 +140,12 @@ public class NewFlutterBoost {
             return;
         }
 
-        mRegistry = new ShimPluginRegistry(mPlatform.engineProvider());
 
 
         // The engine needs to receive the Flutter app's initial route before executing any
         // Dart code to ensure that the initial route arrives in time to be applied.
-        if (platform.initialRoute() != null) {
-            flutterEngine.getNavigationChannel().setInitialRoute(platform.initialRoute());
+        if (mPlatform.initialRoute() != null) {
+            flutterEngine.getNavigationChannel().setInitialRoute(mPlatform.initialRoute());
         }
         // Configure the Dart entrypoint and execute it.
         DartExecutor.DartEntrypoint entrypoint = new DartExecutor.DartEntrypoint(
@@ -153,6 +153,9 @@ public class NewFlutterBoost {
                 "main"
         );
         flutterEngine.getDartExecutor().executeDartEntrypoint(entrypoint);
+
+        mRegistry = new ShimPluginRegistry(engineProvider());
+
     }
 
 
@@ -164,10 +167,17 @@ public class NewFlutterBoost {
 
         public static int ANY_ACTIVITY_CREATED = 1; //当有任何Activity创建时,启动引擎
 
+        public static int FLUTTER_ACTIVITY_CREATED = 2; //当有任何Activity创建时,启动引擎
+
+
+        public static int APP_EXit = 0; //所有flutter Activity destory 时,销毁engine
+        public static int All_FLUTTER_ACTIVITY_DESTROY = 1; //所有flutter Activity destory 时,销毁engine
+
 
         private String dartEntrypoint = DEFAULT_DART_ENTRYPOINT;
         private String initialRoute = DEFAULT_INITIAL_ROUTE;
         private int whenEngineStart = ANY_ACTIVITY_CREATED;
+        private int whenEngineDestory = APP_EXit;
 
 
         private boolean isDebug = false;
@@ -207,7 +217,10 @@ public class NewFlutterBoost {
             this.whenEngineStart = whenEngineStart;
             return this;
         }
-
+        public ConfigBuilder whenEngineDestory(@NonNull int whenEngineDestory) {
+            this.whenEngineDestory = whenEngineDestory;
+            return this;
+        }
         public Platform build() {
 
             Platform platform = new Platform() {
@@ -235,6 +248,11 @@ public class NewFlutterBoost {
                     return ConfigBuilder.this.whenEngineStart;
                 }
 
+                @Override
+                public int whenEngineDestroy() {
+                    return ConfigBuilder.this.whenEngineDestory;
+                }
+
                 public FlutterView.RenderMode renderMode() {
                     return ConfigBuilder.this.renderMode;
                 }
@@ -246,11 +264,6 @@ public class NewFlutterBoost {
 
     }
 
-
-    public FlutterEngine engineProvider() {
-        return sInstance.mPlatform.engineProvider();
-    }
-
     public IContainerManager containerManager() {
         return sInstance.mManager;
     }
@@ -274,4 +287,35 @@ public class NewFlutterBoost {
     public PluginRegistry getPluginRegistry(){
         return  mRegistry;
     }
+
+
+    public FlutterEngine engineProvider() {
+        if (mEngine == null) {
+
+            FlutterMain.startInitialization(mPlatform.getApplication());
+
+            FlutterShellArgs flutterShellArgs = new FlutterShellArgs(new String[0]);
+            FlutterMain.ensureInitializationComplete(
+                    mPlatform.getApplication().getApplicationContext(), flutterShellArgs.toArray());
+
+            mEngine = new FlutterEngine(mPlatform.getApplication().getApplicationContext());
+
+        }
+        return mEngine;
+
+    }
+
+
+    public void boostDestroy(){
+        if(mEngine!=null){
+            mEngine.destroy();
+        }
+        mEngine=null;
+        mRegistry=null;
+        mCurrentActiveActivity=null;
+    }
+
+
+
+
 }
diff --git a/android/src/main/java/com/idlefish/flutterboost/Platform.java b/android/src/main/java/com/idlefish/flutterboost/Platform.java
index 3969ea43740553ffa75d5d6616946250553717d1..46d680ddf4d9c93acecc08cdb7418baf12f17718 100644
--- a/android/src/main/java/com/idlefish/flutterboost/Platform.java
+++ b/android/src/main/java/com/idlefish/flutterboost/Platform.java
@@ -8,21 +8,16 @@ import java.lang.reflect.Method;
 import java.util.Map;
 
 import io.flutter.embedding.android.FlutterView;
-import io.flutter.embedding.engine.FlutterEngine;
-import io.flutter.embedding.engine.FlutterShellArgs;
 import io.flutter.plugin.common.PluginRegistry;
-import io.flutter.view.FlutterMain;
 
 public abstract class Platform {
 
-
-    private FlutterEngine mEngine;
-
     public abstract Application getApplication();
 
     public abstract void openContainer(Context context, String url, Map<String, Object> urlParams, int requestCode, Map<String, Object> exts);
 
     public abstract int whenEngineStart();
+    public abstract int whenEngineDestroy();
 
     public abstract FlutterView.RenderMode renderMode();
 
@@ -37,26 +32,6 @@ public abstract class Platform {
         record.getContainer().finishContainer(result);
     }
 
-    public FlutterEngine engineProvider() {
-        if (mEngine == null) {
-
-            FlutterMain.startInitialization(getApplication());
-
-            FlutterShellArgs flutterShellArgs = new FlutterShellArgs(new String[0]);
-            FlutterMain.ensureInitializationComplete(
-                    getApplication().getApplicationContext(), flutterShellArgs.toArray());
-
-            mEngine = new FlutterEngine(getApplication().getApplicationContext());
-
-        }
-        return mEngine;
-
-    }
-
-    public FlutterEngine getEngine() {
-        return mEngine;
-    }
-
 
         public void registerPlugins(PluginRegistry registry) {
         try {
diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterActivityAndFragmentDelegate.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterActivityAndFragmentDelegate.java
index f7653b388b0573eeb65258e64785f6fc2078f0f0..32a409527d9c682ba9316779299288c36cef22e2 100644
--- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterActivityAndFragmentDelegate.java
+++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterActivityAndFragmentDelegate.java
@@ -77,8 +77,9 @@ public class FlutterActivityAndFragmentDelegate  implements IFlutterViewContaine
 
     void onAttach(@NonNull Context context) {
         ensureAlive();
-
-        initializeFlutter(context);
+        if (NewFlutterBoost.instance().platform().whenEngineStart() == NewFlutterBoost.ConfigBuilder.FLUTTER_ACTIVITY_CREATED) {
+            NewFlutterBoost.instance().doInitialFlutter();
+        }
 
         // When "retain instance" is true, the FlutterEngine will survive configuration
         // changes. Therefore, we create a new one only if one does not already exist.
@@ -116,27 +117,12 @@ public class FlutterActivityAndFragmentDelegate  implements IFlutterViewContaine
         host.configureFlutterEngine(flutterEngine);
     }
 
-    private void initializeFlutter(@NonNull Context context) {
-        FlutterMain.ensureInitializationComplete(
-                context.getApplicationContext(),
-                host.getFlutterShellArgs().toArray()
-        );
-    }
+
 
 
     private void setupFlutterEngine() {
         Log.d(TAG, "Setting up FlutterEngine.");
 
-        // First, check if the host wants to use a cached FlutterEngine.
-//        String cachedEngineId = host.getCachedEngineId();
-//        if (cachedEngineId != null) {
-//            flutterEngine = FlutterEngineCache.getInstance().get(cachedEngineId);
-//            isFlutterEngineFromHost = true;
-//            if (flutterEngine == null) {
-//                throw new IllegalStateException("The requested cached FlutterEngine did not exist in the FlutterEngineCache: '" + cachedEngineId + "'");
-//            }
-//            return;
-//        }
 
         // Second, defer to subclasses for a custom FlutterEngine.
         flutterEngine = host.provideFlutterEngine(host.getContext());
@@ -264,16 +250,6 @@ public class FlutterActivityAndFragmentDelegate  implements IFlutterViewContaine
 
         Utils.fixInputMethodManagerLeak(host.getActivity());
 
-        // Destroy our FlutterEngine if we're not set to retain it.
-//        if (host.shouldDestroyEngineWithHost()) {
-//            flutterEngine.destroy();
-//
-//            if (host.getCachedEngineId() != null) {
-//                FlutterEngineCache.getInstance().remove(host.getCachedEngineId());
-//            }
-//
-//            flutterEngine = null;
-//        }
     }
 
 
@@ -281,12 +257,6 @@ public class FlutterActivityAndFragmentDelegate  implements IFlutterViewContaine
         mSyncer.onBackPressed();
 
         ensureAlive();
-//        if (flutterEngine != null) {
-//            Log.v(TAG, "Forwarding onBackPressed() to FlutterEngine.");
-//            flutterEngine.getNavigationChannel().popRoute();
-//        } else {
-//            Log.w(TAG, "Invoked onBackPressed() before NewFlutterFragment was attached to an Activity.");
-//        }
     }