From ae65351d8ed5ae22c1571260e458235f88071a3b Mon Sep 17 00:00:00 2001 From: mars <3361409208@qq.com> Date: Wed, 5 Aug 2026 17:29:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(mmp):=20Hook=20=E6=97=A0=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E5=94=A4=E9=86=92=E6=88=96=E5=BC=BA?= =?UTF-8?q?=E5=81=9C=E9=87=8D=E5=BC=80=20TNG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 领取台检测开启时,进程在跑但心跳过期会先进历史页唤醒,仍无效则 force-stop 重建 Hook。 --- .../smsmessage/Activity/MmpClaimActivity.java | 80 +++++++++++++++++-- .../smsmessage/mmp/TngProcessHelper.java | 41 ++++++++++ 2 files changed, 114 insertions(+), 7 deletions(-) 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