应用已经有上传和下载,按一次返回就退出,刚开始的任务也跟着中断。我把“离开界面”和“结束程序”分开处理,Android 与当时的桌面实现分别接到各自的平台入口。
下面记录的是这次的处理方式。后来的桌面端换了实现,关闭与退出仍沿用这层区分。
Android 的返回键不再退出
在文件页根目录按返回,原来走 SystemNavigator.pop(),应用直接退了。其他页面按返回是回上一页,两边行为不一致。
改法是在 vaultoz/core 的 MethodChannel 里加一个方法:
"moveToBackground" -> {
moveTaskToBack(true)
result.success(null)
}moveTaskToBack(true) 是 Activity 自带的能力,效果接近按 Home。Flutter 这边 NativeCoreService.moveToBackground() 调过去,files_page.dart 里在根目录判断平台:Android 就放后台,其他平台还是 pop。
关掉窗口,进程还留着
Windows 上原来点关闭就是退出。想要的是最小化到托盘,从托盘菜单里才真正退出。用了 tray_manager 加 window_manager。
关键在 windowManager.setPreventClose(true),不设这个,onWindowClose 不会按预期拦住关闭。拦到之后 windowManager.hide() 把窗口藏起来,进程继续跑;托盘菜单的“退出”才调 windowManager.destroy()。
@override
void onWindowClose() async {
if (await windowManager.isPreventClose()) {
await hideToTray();
}
}托盘菜单只有两项:显示窗口,恢复并聚焦;退出,销毁窗口。初始化放在 main() 里,判一下 Platform.isWindows。
改完试了返回键、窗口恢复和退出,再查看核心进程有没有跟着停止。