客厅电视上装了个 TVBox 系的影视 app(FongMi TV),开了 adb。症状很简单:每次打开都会先跳一个带源名字的加载圈,我印象里以前没有。这次让 AI 通过 adb 连上去查,过程里它有一个判断被实测推翻了,我觉得比结论更值得记。

电视是 192.168.1.126,adb 端口是 5555;我让 AI 先扫了一遍局域网这个端口才找到它。

一、先分清:是故障还是正常启动

先看设备和 app 的基本信息:

adb connect 192.168.1.126:5555
adb shell getprop ro.product.model
adb shell pm list packages -3
export ANDROID_SERIAL=192.168.1.126:5555   # 后面省掉 -s

踩了个小坑:会话里一开始把 -s 192.168.1.126:5555 放进一个 shell 变量再展开,zsh 默认不做单词拆分,命令直接坏掉;改成导出 ANDROID_SERIAL 就省事了。

然后做了三件事:

  1. adb exec-out screencap -p > s1.png 截屏,确认转圈的界面左上角写着源名字 “qist”;
  2. 抓 logcat,按 app 的 pid 过滤;
  3. 对比冷启动和热启动。

热启动的结论很干脆:按 Home 再打开、按返回键退出再打开,都是直接进首页,没有转圈。只有 app 进程是新拉起来的时候才转。

那为什么每次开电视都是冷启动?

adb shell getprop | grep -iE "suspend|fast.?boot|quick"
# persist.sys.suspend.mode=shutdown

遥控器上的"关机"在这台电视上是真关机,不是待机。uptime 也对得上:每次都是刚开机。所以每次看电视,app 都是从零启动。

二、冷启动的时间花在哪

日志里这一步大约 8 秒,拆开是:

  • 下载 qist 的源配置:约 1 秒(电视到 GitHub 的网络没问题,我专门在电视上 curl 测过);
  • 为配置里的 9 个 Python 源启动 app 内置的 Python 运行环境:这台电视芯片慢,光这步约 3 秒;
  • 启动源要用的本地代理程序,再加载首页源。

顺带发现首页源「搜索·豆瓣」每次启动都报 'pdfh' is not defined。这个报错和转圈无关,但值得换掉。

三、一个被实测推翻的判断

AI 当时给的建议是:换一份精简配置——152 个源里去掉 Python 源,预计加载圈能缩到 2–3 秒。我说"可以做"。

它做了:生成一份去掉 Python 源的 140 个源的配置,放到电视本地,让 app 的点播地址指向它;同时把首页源换成最近在看的那个,pdfh 报错确实消失了。

然后新旧配置各录屏两次,用 screenrecord 录冷启动,再用 ffmpeg 切帧、按画面亮度区分"转圈 / 桌面 / 首页"来数秒数:

配置加载圈时长
原 qist 配置约 4.0–4.25 秒
精简配置(无 Python 源)约 4.0–4.25 秒

完全没有差别。 它之前的判断错了:配置本身有缓存,大小几乎不影响启动;时间花在 app 每次启动都要做的初始化上(内置 Python 环境和插件包),跟配置里有哪些源无关。

精简配置不但没提速,还会让配置停在今天的版本、收不到上游后面的更新,所以点播地址又改回了原来的地址,电视上临时放的文件也都删了。

中途还踩了一个坑:换配置地址之后"最近观看"变空了,因为这个 app 的观看记录是按配置分开存的。解决办法是:从电视上拉下它自己的备份文件(/sdcard/TV/backup/*.tv,其实是 gzip 过的 JSON),改里面的配置字段,推回去,再在 app 的设置里点"恢复"。记录和收藏都回来了。

四、硬重启之后还是转,为什么

我让电视硬重启了一次,再打开仍然转圈。AI 看了日志:app 启动后约 6.9 秒初始化完成、8 秒出首页,比平时慢 1–2 秒——刚开机时系统还在拉各种服务,文件也还没进缓存。pdfh 报错没了,说明首页源确实换成功了。

结论没变:只要 app 进程是新启动的,就一定要初始化,一定转圈。

五、升级到新版:2.75 秒

我说"以前没有,估计是新版本的问题"。AI 去查了官方发布,时间线是对得上的:

  • 我 9 月 11 日装的应该是 5.6.3,9 月 28 日自动更新到 5.6.6;
  • 5.6.4 起加了 Node.js 爬虫支持,5.6.6 的更新说明里有一条"修正部分装置的 Python 爬虫资源载入";
  • 回退不可行:官方仓库在 9 月 28 日把旧安装包全清掉了。

所以"是新版引入的"这个说法是推断,没有旧版安装包可以对照验证。

最新的 5.8.2 把 Python、Node.js、QuickJS 等运行环境拆成了独立模块,在「设置 → 模块管理」里单独装。我自己把电视升级到了 5.8.2,让 AI 再测:

  • 冷启动加载圈从约 4 秒降到约 2.75 秒,录两次结果一致;
  • 日志里启动阶段不再加载 Python;
  • 剩下的 2.75 秒是加载配置里的插件包和它自带的代理程序,换哪个版本都省不掉。

升级后要注意:Python 和 QuickJS 模块一开始是没装的,依赖这两类运行环境的源会暂时不能用。我让它把模块一个个装上并重新测启动时间:

  • 装 QuickJS 后:2.75 秒不变;
  • 装 Python 后:2.5–3.25 秒;
  • 六个模块(MPV、BD-J、Python、Node.js、QuickJS、Thunder)全装完:3.0 秒。

也就是说模块是按需加载的,装上不拖慢启动。我只验证了模块装上、一个 JS 源能出首页内容(第一次从 GitHub 拉脚本超时了一次,重试正常),没有逐个测 MPV 播放、蓝光 ISO、磁力这些功能。

六、结论与可复用的做法

  • 转圈不是故障,是"真关机 + 每次冷启动要初始化运行环境"。想彻底去掉,只能把电视的关机方式改成待机(在电视设置里找"开机模式 / 快速开机",adb 权限改不了这个系统项,所以得自己去电视设置里翻;这台电视有没有这个选项我还没确认)。
  • 升级到把运行环境模块化的版本,能把冷启动从约 4 秒压到约 2.75 秒。
  • 换配置源不会加速启动,反而会丢观看记录。
  • 通用做法:用 screenrecord 录屏 + ffmpeg 切帧数秒数,比盯着看或者只看日志时间戳可靠;每次改动都录两遍,才发现了"精简配置没用"。

这次最大的收获其实是第三节:那个"预计缩到 2–3 秒"的判断听起来很合理,但没测过就是猜。只改了东西、不录对照,我就会以为自己优化成功了。