perf: coalesce root tab realtime refresh bursts

This commit is contained in:
kris
2026-04-05 08:26:39 +08:00
parent 71aa1a7143
commit 52f7d08b9e
2 changed files with 93 additions and 3 deletions

View File

@@ -104,6 +104,8 @@ public class MainActivity extends AppCompatActivity {
private boolean conversationQuickActionsVisible = false;
private boolean conversationAutoRefreshArmed = false;
private boolean conversationAutoRefreshEnabled = false;
private boolean rootTabRefreshInFlight = false;
private boolean pendingRootTabRefresh = false;
private final java.util.HashMap<String, Long> recentRealtimeEventTimestamps = new java.util.HashMap<>();
private final Set<String> selectedConversationProjectIds = new LinkedHashSet<>();
private @Nullable RootPagerAdapter rootPagerAdapter;
@@ -362,6 +364,11 @@ public class MainActivity extends AppCompatActivity {
}
void refreshCurrentTab() {
if (rootTabRefreshInFlight) {
pendingRootTabRefresh = true;
return;
}
rootTabRefreshInFlight = true;
if ("devices".equals(activeTab)) {
refreshDevicesData();
return;
@@ -413,9 +420,13 @@ public class MainActivity extends AppCompatActivity {
if (!finalConversationsOk) {
showMessage("刷新失败,请稍后重试");
}
completeRealtimeTabRefresh();
});
} catch (Exception error) {
runOnUiThread(() -> handleSessionRefreshFailure());
runOnUiThread(() -> {
handleSessionRefreshFailure();
completeRealtimeTabRefresh();
});
}
});
}
@@ -448,9 +459,13 @@ public class MainActivity extends AppCompatActivity {
if (!finalDevicesOk) {
showMessage("刷新失败,请稍后重试");
}
completeRealtimeTabRefresh();
});
} catch (Exception error) {
runOnUiThread(() -> handleSessionRefreshFailure());
runOnUiThread(() -> {
handleSessionRefreshFailure();
completeRealtimeTabRefresh();
});
}
});
}
@@ -501,13 +516,26 @@ public class MainActivity extends AppCompatActivity {
if (!finalOtaOk && !finalSettingsOk) {
showMessage("刷新失败,请稍后重试");
}
completeRealtimeTabRefresh();
});
} catch (Exception error) {
runOnUiThread(() -> handleSessionRefreshFailure());
runOnUiThread(() -> {
handleSessionRefreshFailure();
completeRealtimeTabRefresh();
});
}
});
}
void completeRealtimeTabRefresh() {
rootTabRefreshInFlight = false;
if (!pendingRootTabRefresh) {
return;
}
pendingRootTabRefresh = false;
refreshCurrentTab();
}
void handleRealtimeEvent(BossRealtimeEvent event) {
if (event == null || event.eventName.isEmpty()) {
return;