From 465125f6148069c255adc66c4b9c9b5e1d0cb7a2 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Wed, 20 May 2026 14:07:50 +0800 Subject: [PATCH] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=BE=A9=E6=95=B4=E9=BB=9E?= =?UTF-8?q?=E9=96=92=E7=BD=AE=E9=87=8D=E5=95=9F=E6=99=82=E8=A7=B8=E7=99=BC?= =?UTF-8?q?=E5=85=A9=E6=AC=A1=E7=9A=84=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 於 HomeActivity.java 中引進 SharedPreferences 持久化機制,比對當前日期與時間 Slot(如 yyyy-MM-dd HH:mm),避免同一分鐘內或 App 被 kill 掉重啟後重複觸發 RestartAPP2 背景等待執行緒。 2. 於 FontendActivity.java 中同步套用 SharedPreferences 限制邏輯,確保在首頁或購物頁面皆能共享同個重啟記錄,防止發生 90 秒後二次重啟的 Bug。 --- .../com/unibuy/smartdevice/HomeActivity.java | 14 ++++++++++++-- .../unibuy/smartdevice/ui/FontendActivity.java | 18 +++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/unibuy/smartdevice/HomeActivity.java b/app/src/main/java/com/unibuy/smartdevice/HomeActivity.java index ae3e2dd..754f8e3 100644 --- a/app/src/main/java/com/unibuy/smartdevice/HomeActivity.java +++ b/app/src/main/java/com/unibuy/smartdevice/HomeActivity.java @@ -143,8 +143,18 @@ public class HomeActivity extends AppCompatActivityAbstract { } if (timeByM.equals("23:59") || timeByM.equals("04:00") || timeByM.equals("08:00") || timeByM.equals("12:00") || timeByM.equals("16:00") || timeByM.equals("20:00")) { - getLogs().info("當前時間:" + timeByM + ",符合條件,啟動 RestartAPP2 (硬重啟等待模式)..."); - new RestartAPP2(this).start(); + android.content.SharedPreferences prefs = getSharedPreferences("AppRestartPrefs", Context.MODE_PRIVATE); + String today = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date()); + String currentSlot = today + " " + timeByM; + String lastRestartSlot = prefs.getString("last_restart_slot", ""); + + if (!currentSlot.equals(lastRestartSlot)) { + prefs.edit().putString("last_restart_slot", currentSlot).commit(); + getLogs().info("當前時間:" + timeByM + ",符合條件,啟動 RestartAPP2 (硬重啟等待模式)..."); + new RestartAPP2(this).start(); + } else { + getLogs().debug("當前時間時段 " + currentSlot + " 已執行過重啟,跳過重複啟動"); + } } //每半小時主動連線下位機一次 diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/FontendActivity.java b/app/src/main/java/com/unibuy/smartdevice/ui/FontendActivity.java index 4fd912a..9781d72 100644 --- a/app/src/main/java/com/unibuy/smartdevice/ui/FontendActivity.java +++ b/app/src/main/java/com/unibuy/smartdevice/ui/FontendActivity.java @@ -247,11 +247,19 @@ public class FontendActivity extends AppCompatActivityAbstract { // 【第一層】定時重啟:到了整點就啟動等待模式(RestartAPP2 自己會等閒置 >= 90 秒才真重啟) if (timeByM.equals("04:00") || timeByM.equals("08:00") || timeByM.equals("12:00") || timeByM.equals("16:00") || timeByM.equals("20:00") || timeByM.equals("23:59")) { - long idle = MyApp.getInstance().getIdleSeconds(); - getLogs().info("定時重啟觸發:" + timeByM + ",目前閒置 " + idle + " 秒,啟動等待模式..."); - // 無論有沒有人在用,都啟動 RestartAPP2 - // RestartAPP2 會每 5 秒檢查一次,直到閒置 >= 90 秒才真正重啟(最多等 10 分鐘) - new RestartAPP2(this).start(); + android.content.SharedPreferences prefs = getSharedPreferences("AppRestartPrefs", Context.MODE_PRIVATE); + String today = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date()); + String currentSlot = today + " " + timeByM; + String lastRestartSlot = prefs.getString("last_restart_slot", ""); + + if (!currentSlot.equals(lastRestartSlot)) { + prefs.edit().putString("last_restart_slot", currentSlot).commit(); + long idle = MyApp.getInstance().getIdleSeconds(); + getLogs().info("定時重啟觸發:" + timeByM + ",目前閒置 " + idle + " 秒,啟動等待模式..."); + new RestartAPP2(this).start(); + } else { + getLogs().debug("當前時間時段 " + currentSlot + " 已執行過重啟,跳過重複啟動"); + } } // 【第二層】閒置深度刷新:任何時間閒置超過 30 分鐘就重啟 (暫時關閉,改依賴定時重啟)