diff --git a/app/src/main/java/com/miraclegarden/smsmessage/Activity/MmpClaimActivity.java b/app/src/main/java/com/miraclegarden/smsmessage/Activity/MmpClaimActivity.java index b67556e..4e02050 100644 --- a/app/src/main/java/com/miraclegarden/smsmessage/Activity/MmpClaimActivity.java +++ b/app/src/main/java/com/miraclegarden/smsmessage/Activity/MmpClaimActivity.java @@ -60,6 +60,9 @@ public class MmpClaimActivity extends MiracleGardenActivity 60_000L) { - if (TngProcessHelper.launch(this)) { - lastTngLaunchAt = now; - Toast.makeText(this, "检测到 TNG 已退出,正在重新打开…", Toast.LENGTH_SHORT).show(); + if (autoWatchWhileOpen && autoLaunchTngIfKilled) { + if (!alive) { + long now = System.currentTimeMillis(); + if (now - lastTngLaunchAt > 60_000L) { + if (TngProcessHelper.launch(this)) { + lastTngLaunchAt = now; + Toast.makeText(this, "检测到 TNG 已退出,正在重新打开…", Toast.LENGTH_SHORT).show(); + } } + } else { + maybeRecoverStaleHook(); } } updateConnStatus(); @@ -359,6 +366,63 @@ public class MmpClaimActivity extends MiracleGardenActivity 0 ? System.currentTimeMillis() - hookAt : Long.MAX_VALUE; + if (age <= 3 * 60_000L) { + hookRecoverStep = 0; + return; + } + long now = System.currentTimeMillis(); + boolean bounce = MmpLocalSettings.load(this) + .optBoolean("autoBounceHistoryOnDisconnect", true); + + if (hookRecoverStep == 0) { + if (now - lastHookRecoverAt < 45_000L) { + return; + } + lastHookRecoverAt = now; + hookRecoverStep = 1; + boolean ok = bounce + ? TngProcessHelper.openMoneyPacketHistory(this) + : TngProcessHelper.launch(this); + if (ok) { + Toast.makeText(this, "Hook 无心跳,正在唤醒 TNG…", Toast.LENGTH_SHORT).show(); + } + return; + } + + if (hookRecoverStep == 1) { + if (now - lastHookRecoverAt < 90_000L) { + return; + } + // 唤醒后仍无心跳 → 强停重建 + lastHookRecoverAt = now; + hookRecoverStep = 2; + Toast.makeText(this, "仍无心跳,强制重启 TNG…", Toast.LENGTH_SHORT).show(); + new Thread(() -> { + boolean ok = TngProcessHelper.forceStopAndLaunch(this); + runOnUiThread(() -> { + if (ok) { + lastTngLaunchAt = System.currentTimeMillis(); + } else { + Toast.makeText(this, "强制重启 TNG 失败", Toast.LENGTH_SHORT).show(); + hookRecoverStep = 0; + } + }); + }, "mmp-hook-recover").start(); + return; + } + + // step 2 后隔 3 分钟仍无心跳,再重试一轮 + if (now - lastHookRecoverAt > 3 * 60_000L) { + hookRecoverStep = 0; + } + } + private void pingDebugServer() { lastDebugPingAt = System.currentTimeMillis(); MmpSettingsClient.pingHealth(ok -> runOnUiThread(() -> { @@ -405,7 +469,9 @@ public class MmpClaimActivity extends MiracleGardenActivity