diff --git a/services/tui_service.py b/services/tui_service.py index fd07d78..778a2a8 100644 --- a/services/tui_service.py +++ b/services/tui_service.py @@ -425,10 +425,9 @@ class SystemMonitor(Static): def set_collector(self, c): self._collector = c - def on_mount(self): - self._timer = self.set_interval(2, self._refresh_stats) - - def _refresh_stats(self): + def refresh(self): + """由外部 asyncio task 驱动刷新(比 set_interval 更抗 Android 挂起)""" + self._refresh_stats() try: if not self._collector: self.update("📊 系统监控: 数据源未连接") @@ -477,12 +476,13 @@ class PluginStatusPanel(Static): self._plugin_service = plugin_service self._timer = None - def on_mount(self): - self._timer = self.set_interval(3, self._refresh) - def set_plugin_service(self, svc): self._plugin_service = svc + def refresh(self): + """由外部 asyncio task 驱动刷新""" + self._refresh() + def _refresh(self): try: if not self._plugin_service: @@ -784,7 +784,10 @@ class TuiService: # 启动消息处理任务 self._message_processor_task = asyncio.create_task(self._process_message_queue()) - + + # 启动后台刷新任务 (asyncio.sleep 比 set_interval 更抗 Android 挂起) + self._refresh_task = asyncio.create_task(self._refresh_monitors()) + # 在后台运行TUI asyncio.create_task(self._run_tui()) @@ -850,6 +853,17 @@ class TuiService: except Exception as e: logger.error(f"消息处理任务出错: {str(e)}") + async def _refresh_monitors(self): + """后台刷新系统监控 + 插件面板 (asyncio.sleep, Android 挂起后可恢复)""" + try: + while True: + if self.tui_app: + self.tui_app.system_monitor.refresh() + self.tui_app.plugin_panel.refresh() + await asyncio.sleep(2) + except asyncio.CancelledError: + logger.debug("监控刷新任务被取消") + def _setup_title(self): """设置TUI标题""" try: @@ -886,6 +900,8 @@ class TuiService: def shutdown(self): """关闭TUI服务""" try: + if hasattr(self, '_refresh_task') and self._refresh_task: + self._refresh_task.cancel() if self.tui_app: self.tui_app.shutdown() print("TUI服务已关闭")