diff --git a/app/src/main/java/org/exthmui/game/services/OverlayService.java b/app/src/main/java/org/exthmui/game/services/OverlayService.java
index 1bab742..8e5f570 100644
--- a/app/src/main/java/org/exthmui/game/services/OverlayService.java
+++ b/app/src/main/java/org/exthmui/game/services/OverlayService.java
@@ -144,7 +144,6 @@
             if (mWindowManager != null) {
                 mWindowManager.updateViewLayout(mGamingFloatingButton, mGamingFBLayoutParams);
             }
-            mQSAppView.setFloatingButtonCoordinate(mGamingFBLayoutParams.x, mGamingFBLayoutParams.y);
         }
 
         // 弹幕设置
@@ -240,9 +239,6 @@
                                             .putInt(Constants.LocalConfigKeys.FLOATING_BUTTON_COORDINATE_HORIZONTAL_Y, mGamingFBLayoutParams.y)
                                             .apply();
                                 }
-                                if (mQSAppView != null) {
-                                    mQSAppView.setFloatingButtonCoordinate(mGamingFBLayoutParams.x, mGamingFBLayoutParams.y);
-                                }
                             }
                             isMoved = false;
                             break;
diff --git a/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java b/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
index 7f3933c..8439485 100644
--- a/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
+++ b/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
@@ -16,6 +16,7 @@
 
 package org.exthmui.game.ui;
 
+import android.app.ActivityManager;
 import android.app.ActivityOptions;
 import android.app.WindowConfiguration;
 import android.content.Context;
@@ -24,12 +25,15 @@
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.os.UserHandle;
+import android.util.ArrayMap;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.view.View;
 import android.widget.LinearLayout;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
@@ -37,13 +41,15 @@
 import org.exthmui.game.misc.Constants;
 import org.exthmui.game.qs.AppTile;
 
+import java.util.List;
+
 public class QuickStartAppView extends LinearLayout implements View.OnClickListener {
 
     private Context mContext;
     private PackageManager mPackageManager;
+    private ActivityManager mActivityManager;
     private ActivityOptions mActivityOptions;
     private Intent mHideMenuIntent = new Intent(Constants.Broadcasts.BROADCAST_GAMING_MENU_CONTROL).putExtra("cmd", "hide");
-    int left, right, top, bottom;
 
     public QuickStartAppView(Context context) {
         this(context, null);
@@ -61,6 +67,7 @@
         super(context, attrs, defStyleAttr, defStyleRes);
 
         mContext = context;
+        mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
         mPackageManager = mContext.getPackageManager();
 
         this.setDividerDrawable(context.getDrawable(R.drawable.qs_divider));
@@ -87,7 +94,7 @@
         }
     }
 
-    public void setFloatingButtonCoordinate(int x, int y) {
+    private void startActivity(@NonNull String packageName) {
         DisplayMetrics m = mContext.getResources().getDisplayMetrics();
         int width, height;
         if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
@@ -99,10 +106,29 @@
             height = m.heightPixels - 200;
             width = height * 4 / 3;
         }
-        left = 100;
-        right = left + width;
-        top = 150;
-        bottom = top + height;
+        int left = 100;
+        int right = left + width;
+        int top = 100;
+        int bottom = top + height;
+        mActivityOptions.setLaunchBounds(new Rect(left, top, right, bottom));
+
+        try {
+            List<ActivityManager.RecentTaskInfo> recentTaskInfoList = mActivityManager.getRecentTasks(100, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+            for (ActivityManager.RecentTaskInfo info : recentTaskInfoList) {
+                if (info.isRunning && info.topActivity != null && packageName.equals(info.topActivity.getPackageName())) {
+                    mActivityManager.getService().startActivityFromRecents(info.taskId, mActivityOptions.toBundle());
+                    return;
+                }
+            }
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+
+        Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(packageName);
+        startAppIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+        startAppIntent.setPackage(null);
+        mContext.startActivityAsUser(startAppIntent, mActivityOptions.toBundle(), UserHandle.CURRENT);
+
     }
 
     @Override
@@ -110,13 +136,7 @@
         if (v instanceof AppTile) {
             AppTile appTile = (AppTile) v;
             LocalBroadcastManager.getInstance(mContext).sendBroadcastSync(mHideMenuIntent);
-            Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(appTile.getKey());
-            startAppIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-            startAppIntent.setPackage(null);
-            Rect appWindowRect = new Rect(left, top, right, bottom);
-            mActivityOptions.setLaunchBounds(appWindowRect);
-            mContext.startActivityAsUser(startAppIntent, mActivityOptions.toBundle(), UserHandle.CURRENT);
-
+            startActivity(appTile.getKey());
         }
     }
 }
