Repository navigation
DataBackup v3.12.1
修复:应用装得多时,扫描列表会卡
有用户反馈设备上应用装得多了,进备份页扫描时会卡住。查下来原因不在扫描本身,而在进度通知。
每处理一个应用,程序都会更新一次「正在初始化应用列表」这条前台通知。而系统更新通知的动作只能在主线程做,每次还要跟系统进程来回通信一次。
实测一台装了 47 个第三方应用的设备:扫描全程只用了 145 毫秒,但光是刷新通知就在 0.79 秒里做了 291 次,全部挤在主线程上——通知开销是实际工作量的 5 倍以上。应用数量上百时,主线程会被连续占满,表现就是界面卡死。
现在改成按时间合帧:250 毫秒内最多更新一次通知,开始和结束两条保证发出,进度条照常走。
同一台设备复测:通知更新从 291 次降到 6 次,主线程不再被占满。
修复:后台启动时,恢复页的备份列表可能加载不出来
如果 App 启动后立刻退到后台(比如返回桌面),系统会禁止后台程序弹前台通知。
原来的代码没有处理这个拒绝,异常直接把整个加载任务打断了——恢复页因此看不到已经备份好的应用,看起来就像「备份丢了」。
现在改成:通知发不出去也要把数据加载完。通知只是展示,不该让正事失败。
复测(启动后立即切后台):加载任务从「失败」变成「成功」,已备份列表正常显示,数据一条不少。
其他优化
顺手清掉了几处「每个应用都要从头算一遍」的重复开销:应用的权限定义、SSAID 读取、数据库序列化,都改成复用缓存。这几项在应用少的时候感觉不明显,应用多时是实打实的累积成本。
本次是纯性能与稳定性修复,功能没有变化,直接覆盖安装即可。
版本号:3.12.1(versionCode 3612134)
配套工具更新:Windows 端 FTP 服务器 v2.5
手机要把备份传到电脑,得先在电脑上起个 FTP 服务,这个配套工具就是干这个的。这次从 v1.5 直接提到 v2.5,把原来的控制台向导换成了窗口界面,另外修掉了几个容易让人白折腾的问题。
界面这块,账号、密码、端口、备份目录都在窗口里填,点「开启」就跑起来。密码能一键随机生成,也能临时切成明文看一眼;备份目录能浏览选择,选过的会记住。窗口下半部分是给手机端看的连接信息,点「复制全部」直接粘过去就行。
地址选择改成按默认路由排:真实网卡排第一并标「推荐」,其余标成「备用地址(多半是虚拟网卡,手机连不上)」。以前是按系统返回的顺序列,VMware 的虚拟网卡经常排在第一位,用户照着第一个填,怎么都连不上。
顺带修了旧版一个很隐蔽的毛病。旧版把数据连接(PASV)的地址写成列表里的第一个地址,而那个地址常常就是虚拟网卡,于是手机能登录、能看目录,一传文件就失败。现在改成按客户端实际连进来的地址回应。这事我们自己的机器上复现过:修之前手机被指向 VMware 网卡的地址,修之后才是真实网卡的地址。
日志也不再刷英文了。手机点一下「测试连接」,以前日志里是一串 FEAT、USER、TYPE、PASV、Goodbye,现在只留关键几行:
客户端已连接: 192.xxx.xxx.xxx
通信正常: 账号 123 登录成功(来自 192.xxx.xxx.xxx)
上传完成: ...\com.mn.quicknote\user_0\apk.tar.zst(9860890 字节)
客户端已断开: 192.xxx.xxx.xxx
日志同时会写一份到磁盘(%TEMP%\DataBackupFTP\logs,保留最近 5 个),在日志区右键可以复制、另存为、清空。
诊断包也重做了。以前打出来的包只有环境信息和文件清单,用户报问题还是得靠打字描述;现在包里带上运行日志,另外会写清楚:2121 端口上是谁在监听(进程名 + PID)、连上去读到的问候语是不是本工具、防火墙那两条规则还在不在、每张网卡是真实网卡还是虚拟网卡、密码是否为空(只记长度,不写内容)。包里附了一份 README 说明怎么看,一般照着顺序读就能定位。
其他还有:浅色/深色主题可切换并记住;启动后只留一个界面窗口(以前会多弹一个命令行);账号、密码、目录、主题都存在 %USERPROFILE%\.databackup_ftp_config.json,下次打开自动带出。
用法:下载 exe 双击(第一次会请求管理员权限,用来放行防火墙),填好账号密码和备份目录,点「开启」,手机端 DataBackup 的云备份里照连接卡片填写。bat 脚本版同样已经是界面版,跟 exe 是同一份代码。
文件:DataBackupFTPServer-v2.5.exe(约 14 MB,免安装,双击即用;README 里有更详细的说明)。