uiautomator2.connect() + 可避免的重复设备/应用检查
#109 的真机数据判定为 No-Go 后,用户再次明确要求“做 #110”。因此原性能门槛不再作为是否开始实施的阻塞条件,但仍保留为结果评价和回退依据。本次变更不放宽线程归属、每任务页面重校验、不可逆阶段只核对、真实下单默认关闭等安全约束;若收益不足或稳定性下降,验收时明确建议回退。
本工单不改变可见 UI 布局和操作路径,因此无需制作 HTML 交互原型;后台任务继续沿用现有状态提示和取消入口。
当前持续自动获取流程每轮创建新的任务 Worker 和 QThread,任务执行服务随后重新调用 uiautomator2.connect(serial)。同一 Android 设备连续执行多个任务时,重复建立会话、检查应用和初始化自动化环境会增加领取任务到打开商品页的等待时间。
uiautomator2.connect(serial)
直接把 uiautomator2.Device 放入全局变量并交给不同线程复用不安全:Device 及其相关调用必须由固定线程创建、使用和销毁。同一设备也不得被采集、采购、手动重新执行和订单核对并发控制。
uiautomator2.Device
QObject + moveToThread
task_runs.irreversible_action_at
quit()/wait()
terminate()
pdd_data
预计修改文件(Codex 实施前须按实际代码再次确认):
client/src/pdd_ui_event.py
client/src/task_dispatcher.py
client/src/pdd_device_service.py
client/src/pdd_collect_service.py
client/src/pdd_u2_purchase_adapter.py
docs/client/02-architecture.md
uiautomator2.connect()
open_url()
从 client/ 目录执行:
client/
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
专项测试至少覆盖:
irreversible_action_at
状态:待实施(有前置门槛)。交给 Codex 实施,但必须先完成 #109,并确认其真机热启动数据达到正文 Go/No-Go 门槛。本轮未修改代码、未提交 Git。
#109 真机数据已完成,本工单当前判定 No-Go,保持不实施。
热启动 5 次中位数:uiautomator2.connect() 203 ms,领取到商品页端到端 14328 ms,占约 1.4%,未达到“至少 2 秒或 20%”的前置门槛。#109 已消除相邻第二次 app_current();每个任务仍必须重新做一次应用状态检查,持久 Device 会话不能安全省掉该检查。
app_current()
当前最大耗时是首次 app_current() 中位数 10578 ms,且这台 OPPO/ColorOS 即使 PDD 位于屏幕前台仍可能报告系统设置页。若继续优化,应另建边界清晰的应用状态检测诊断任务;不要直接启动本工单的线程架构重构。详细冷/热启动表见 #109 评论。
状态更新为 进行中。用户在 #109 No-Go 结论后明确要求继续实施 #110,已把该决策和不放宽的安全约束写入正文。实施将保持 PyQt5、真实下单默认关闭,并只用单元测试及采集/采购 dry_run 验证。
实施进度:固定 QThread、90 秒 Device 连接复用、健康检查失败后最多重连一次、停止/设置变更/TTL/窗口关闭释放,以及采集/采购/核单官方 Adapter 的线程内服务绑定已完成。重新上报仍使用独立网络 Worker;数据库、Admin 接口、任务状态和 pdd_data 未改,真实下单默认关闭。
验证结果:
性能差异如实记录:5 次会话建立/健康检查分别为 11730.6、10756.5、10589.1、10738.6、10826.3 ms,当前包名仍被设备报告为 com.android.settings。因此连接复用成立,但正文“降低 30% 或 1.5 秒”的性能项未达到/无法由本改造达到;主要耗时仍是每任务不可省略的 app_current()。该项保留为待验收差异,不降低页面和采购安全校验。
com.android.settings
状态:实现完成,待用户验收。
70cedc3
refactor: 复用持久设备工作线程 (#110)
40cd8af
docs: 归档任务 #110
docs/task/110-持久设备工作线程复用uiautomator2会话.md
待验收差异:连接复用和线程安全已实现,但原“中位耗时降低 30% 或 1.5 秒”未达到,原因是每任务不可省略的 app_current() 仍约 10.6 秒且设备报告 com.android.settings。本次没有用删除安全校验来换速度。工单暂不关闭,父工单清单暂不勾选,等待用户验收。
用户已于 2026-08-11 明确验收通过。
eca9289
No dependencies set.
The note is not visible to the blocked user.
基本信息
uiautomator2.connect() + 可避免的重复设备/应用检查中位耗时不少于 2 秒,或占领取后到商品页就绪总耗时的 20% 以上决策变更(2026-08-10)
#109 的真机数据判定为 No-Go 后,用户再次明确要求“做 #110”。因此原性能门槛不再作为是否开始实施的阻塞条件,但仍保留为结果评价和回退依据。本次变更不放宽线程归属、每任务页面重校验、不可逆阶段只核对、真实下单默认关闭等安全约束;若收益不足或稳定性下降,验收时明确建议回退。
本工单不改变可见 UI 布局和操作路径,因此无需制作 HTML 交互原型;后台任务继续沿用现有状态提示和取消入口。
要解决什么
当前持续自动获取流程每轮创建新的任务 Worker 和 QThread,任务执行服务随后重新调用
uiautomator2.connect(serial)。同一 Android 设备连续执行多个任务时,重复建立会话、检查应用和初始化自动化环境会增加领取任务到打开商品页的等待时间。直接把
uiautomator2.Device放入全局变量并交给不同线程复用不安全:Device 及其相关调用必须由固定线程创建、使用和销毁。同一设备也不得被采集、采购、手动重新执行和订单核对并发控制。做什么 / 不做什么
做
QObject + moveToThread固定到一个 QThread。task_runs.irreversible_action_at有值后,任何异常都只允许进入订单核对,绝不重新下单。quit()/wait(),不得使用terminate()。不做
uiautomator2.Device。pdd_data。已确认的实现方案
uiautomator2.Device,同一 serial 且在 TTL 内健康时复用;serial 变化或健康检查失败时关闭旧会话并重建。预计修改文件(Codex 实施前须按实际代码再次确认):
client/src/pdd_ui_event.pyclient/src/task_dispatcher.pyclient/src/pdd_device_service.pyclient/src/pdd_collect_service.pyclient/src/pdd_u2_purchase_adapter.pydocs/client/02-architecture.md、线程/采购安全相关文档验收标准
uiautomator2.connect()只调用一次。open_url()”中位耗时至少降低 30% 或 1.5 秒。验证方式
从
client/目录执行:专项测试至少覆盖:
风险和回退
irreversible_action_at为硬边界;关闭过程停止接单并等待安全点。状态:待实施(有前置门槛)。交给 Codex 实施,但必须先完成 #109,并确认其真机热启动数据达到正文 Go/No-Go 门槛。本轮未修改代码、未提交 Git。
#109 真机数据已完成,本工单当前判定 No-Go,保持不实施。
热启动 5 次中位数:
uiautomator2.connect()203 ms,领取到商品页端到端 14328 ms,占约 1.4%,未达到“至少 2 秒或 20%”的前置门槛。#109 已消除相邻第二次app_current();每个任务仍必须重新做一次应用状态检查,持久 Device 会话不能安全省掉该检查。当前最大耗时是首次
app_current()中位数 10578 ms,且这台 OPPO/ColorOS 即使 PDD 位于屏幕前台仍可能报告系统设置页。若继续优化,应另建边界清晰的应用状态检测诊断任务;不要直接启动本工单的线程架构重构。详细冷/热启动表见 #109 评论。状态更新为 进行中。用户在 #109 No-Go 结论后明确要求继续实施 #110,已把该决策和不放宽的安全约束写入正文。实施将保持 PyQt5、真实下单默认关闭,并只用单元测试及采集/采购 dry_run 验证。
实施进度:固定 QThread、90 秒 Device 连接复用、健康检查失败后最多重连一次、停止/设置变更/TTL/窗口关闭释放,以及采集/采购/核单官方 Adapter 的线程内服务绑定已完成。重新上报仍使用独立网络 Worker;数据库、Admin 接口、任务状态和 pdd_data 未改,真实下单默认关闭。
验证结果:
uiautomator2.connect(),所有调用线程 ID 均为 22788。性能差异如实记录:5 次会话建立/健康检查分别为 11730.6、10756.5、10589.1、10738.6、10826.3 ms,当前包名仍被设备报告为
com.android.settings。因此连接复用成立,但正文“降低 30% 或 1.5 秒”的性能项未达到/无法由本改造达到;主要耗时仍是每任务不可省略的app_current()。该项保留为待验收差异,不降低页面和采购安全校验。状态:实现完成,待用户验收。
70cedc3(refactor: 复用持久设备工作线程 (#110))40cd8af(docs: 归档任务 #110)docs/task/110-持久设备工作线程复用uiautomator2会话.md待验收差异:连接复用和线程安全已实现,但原“中位耗时降低 30% 或 1.5 秒”未达到,原因是每任务不可省略的
app_current()仍约 10.6 秒且设备报告com.android.settings。本次没有用删除安全校验来换速度。工单暂不关闭,父工单清单暂不勾选,等待用户验收。用户已于 2026-08-11 明确验收通过。
eca9289