尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PRAXIST Run Reports 实战指南:面向研究者与诊断 Agent 的可读性运行报告体系
人工智能AI Agent多智能体Agent 工作流深度研究AI 评测【免费下载链接】PRAXISTAutonomous research system for measurable, computer-executable research.项目地址https://gitcode.com/gh_mirrors/pr/PRAXIST点击查看免费下载本文是 PRAXIST 自主科研系统中「Run Reports运行报告」机制的完整技术指南。Run Reports 是从规范运行证据canonical run evidence派生出的人类可读视图Markdown PDF用于向研究者与诊断 Agent 说明一次科研运行「进展到了哪里、最强变体是谁、运行是否健康」而不会成为新的 result、frontier 或 baseline 的所有者。读完本文你将掌握 PRAXIST 自动报告的三种触发时机、A/B/C 三段式报告结构、PDF 伴生图表规则、tool_server:run_report工具服务器的调用方式以及报告与规范证据之间的只读边界。一、什么是 Run Reports从规范证据到派生视图Run Reports 是 PRAXIST 中面向人而非面向机器的证据视图。其核心定位在原文档中定义得非常明确报告是规范证据的派生视图derived view不是新的证据所有者。它解释「进展如何」但不会成为另一个 result、frontier 或 baseline 的归属方。文档给出的数据流如下图所示这条链路的含义是报告永远「只读」规范证据并做摘要规范证据不会因为报告的生成或刷新而发生任何变化。在源码层面run_report.py 的文件头注释也明确写明了这一设计意图The report generator is intentionally deterministic and read-only over run facts. It summarizes frontier/Pareto outcomes, lineage hints, and health signals without changing promotion, frontier, PI, or guard behavior.即报告生成器对运行事实是确定性、只读的它只汇总 frontier/Pareto 结果、血统线索和健康信号不会改变 promotion、frontier、PIPrincipal Investigator或 guard 行为。规范证据与派生视图的边界理解 Run Reports 的前提是分清哪些是「规范事实canonical truth」、哪些是「派生视图」类别位置角色规范事实result 与 finding 摘要、frontier/frontier_manifest.json、已提交的gems/gems_state.json、gen_N/generation_boundary.json晋升promotion与代际关闭generation close决策的唯一依据派生视图task/docs/praxist_reports/下的 Markdown/PDF 报告人类可读摘要永不回喂决策原文档明确强调Reports never feed promotion or generation close decisions——报告从不参与 promotion 或 generation close 决策。这一点在 SKILL.md 中同样被反复强调报告是 derived view规范事实始终留在 frontier、findings、result summaries、Gems state 和 generation boundaries 中。二、自动报告的三种触发条件Praxist 会在以下任一条件满足时自动向task/docs/praxist_reports/写入报告首个可信 frontier 结果在同指标上击败已知 baselinefirst credible frontier result beats a known baseline on the same metric已完成代数达到 3 的倍数3、6、9 …运行进入终态terminal state。这三种触发器在源码 run_report.py 的_due_trigger中逐一实现finalTrue且尚未报告过终态 → 返回final_run_completion尚未报告过「首个可信 baseline 击败」且_has_baseline_beat判定成立 → 返回first_credible_baseline_beatcompleted generation_id 1当completed 0且completed % 3 0且该代尚未被记录 → 返回periodic_3_generation。_has_baseline_beat的实现要点是只有同时满足成熟度mature enough、无持久晋升排除durable promotion exclusion、无报告排除标记的 entry 才会参与 baseline 比较比较时依据任务声明的指标方向maximize/minimize判断是否严格优于已知最优 baseline 值。例如minimize方向要求metric_value min(baseline_values)maximize方向要求metric_value max(baseline_values)见 run_report.py。触发状态的持久化触发记录存放在run_dir/reports/human_report_state.json源码常量REPORT_STATE_REL Path(reports) / human_report_state.json。每次报告生成后maybe_generate_boundary_report会原子写入generated_reports已生成报告的路径、trigger、generation_id、创建时间first_credible_baseline_beat_reported标记首个 baseline 击败已报告periodic_generations_reported已报告的周期性代数列表final_reported终态已报告标记。这套状态机保证了同一种触发在单次运行内不会重复产出——test_boundary_triggers_baseline_periodic_and_final_reportstest_run_report.py验证了同一 generation 反复调用maybe_generate_boundary_report不会重复生成并验证了三种触发分别对应first_credible_baseline_beat、periodic_3_generation、final_run_completion。报告生成失败不阻塞运行报告是「建议性advisory」产物。generate_boundary_report_safely与generate_terminal_report_safely都包裹了 try/except任何异常只记录 warning 并返回None绝不会中断研究循环。测试test_empty_report_and_safe_hook_failure_are_non_blockingtest_run_report.py专门验证了这一点。与任务身份task identity的隔离原文档指出报告子树被排除在任务身份之外The generated subtree is excluded from task identity因此报告刷新不会改变任务 manifest也不会阻塞兼容的 resume。这保证了每次运行结束后即使报告反复刷新任务的可恢复性不受影响。在运行生命周期中的挂载点报告钩子实际挂载在两条路径上GenerationLoop 代际推进路径generation_loop.py 在L687每代结束时调用generate_loop_boundary_report(self, generation_idgen_id)在L839最终代时以finalTrue调用终态兜底路径startup.py 调用run_report.generate_terminal_report_safely(prepared, summary)覆盖那些不经过 GenerationLoop 返回的终态路径例如error、failed、interrupted、stopped等退出条件且已完成代数大于 0 时才生成。三、报告结构A / B / C 三段式每一份报告都遵循相同的三段顺序原文档「Report Structure」一节亦是 run_report.pyrender_report_markdown的实际渲染顺序A. Strongest variants or Pareto front最强变体或帕累托前沿呈现任务声明的指标、可信度credibility与简洁的机制摘要mechanism summaries若尚无干净的 frontier 条目来自较低权威证据lower-authority evidence如 validation candidate、shared finding、result summary的维度获胜者只能以明确标注的「信号signal」形式出现不得当作干净的晋升事实。渲染细节上A 节按情况输出### Clean Frontier / Pareto Entries按方向排序的干净 frontier 条目表格列为 Rank / Variant / Gen / Lane / Metric / Value / Stage / Principle-Evidence### Unranked Frontier Entries (Direction Unknown)指标方向未知、无法参与排名比较的 frontier 条目### Mature Dimension Winners每个任务维度的成熟获胜者含 Direction、Baseline Relationbeats baseline X/ties baseline X/worse than baseline X、Promotion 状态与证据来源### Strong Signals Requiring Validation需要验证的强信号——可见但不呈现为成熟证据并附带阻断原因blocker。测试test_report_separates_authorized_reduced_maturity_from_routingtest_run_report.py验证了同一指标上promotion_eligibletrue的条目进入Mature Dimension Winners而validation_onlytrue的条目被降级为Strong Signals Requiring Validation。B. Strong-variant lineage强变体血统只跟踪 A 节中的强变体沿其**父变体parent、代数generations、来源结果source results与继承思想inherited ideas**展开。渲染为Variant | Gen | Parent | Result Source | Parent Usage | Effective Config | Development Note表格其中parent_candidate/parent_variant/parent_lineage用于追溯父变体source_result_path/result_artifact_path指向来源结果parent_usage说明父变体被如何使用如direct improvement、repair follow-up、complete_validationEffective Config 一栏会带上source_result_effective_config_sha256前 12 位摘要便于核对复现配置。若强变体未暴露结构化血统字段报告会明确提示「未来任务应在 finding 的extra或 metrics 中发布parent_candidate、parent_usage与source_result_path」而不是编造血统。C. Run health运行健康汇总工件一致性artifact consistency、运行摩擦operational friction、诊断覆盖度diagnostic coverage与caveats注意事项。_health_summary会输出Status 与 exit condition根据run_summary.json/orchestrator_status.json推断succeeded/failed/unknown如exit_condition为completed/max_generations/plateau则视为 succeededGeneration progressgenerations_completed/max_generationsStructured findings visible 数量显式 warnings来自 run_summary 与 orchestrator最多各取前 5 条保留待跟进validation candidates retained for follow-up的数量最新代际边界状态gen_N/generation_boundary.json的 status。PDF 伴生报告与图表纪律PDF 与 Markdown 使用相同的事实并且只在任务声明了数值方向numeric directions时才添加图表。源码中_build_report_chartsrun_report.py按可信度选择图表标题Best X by generation或Signal-only X observations by generation支持的图表类型为line最受关注指标随代际的 best-value 趋势_generation_best_seriesbar各任务维度的单指标获胜者最多 10 项scatter风险/回报散点要求同时存在 maximize 方向的 reward 类指标与 minimize 方向的 risk 类指标且两点以上才绘制。原文档的关键纪律是方向未知的指标只能作为上下文展示不能用于选择获胜者、触发 baseline 声明或驱动方向性图表。测试test_unknown_direction_is_unranked_and_never_claims_improvementtest_run_report.py验证了方向未知的指标不会进入dimension_winners、不会出现在任何图表中也不会输出beats baseline字样。PDF 由源码内置的_SimplePdf类run_report.py生成——这是一个零第三方依赖的迷你 PDF 写入器直接输出 PDF 1.4 格式对象绘制标题、项目符号、柱状图、折线图与散点图。若 PDF 渲染失败例如缺少字体Markdown 报告仍然生成成功仅pdf_path返回None并记录 warning见测试test_report_survives_pdf_failure_and_health_infers_terminal_status。四、手动生成tool_server:run_report 工具服务器插件注册信息run_report是一个标准的 Praxist tool_server 插件其元数据位于 plugin.yamlname: run_reportkind: tool_serverversion: 0.1.0stability: experimental服务名server_name: run-report暴露工具generate_run_report能力要求tool_server.run_report可见范围panel入口entrypoint: adapter:create_tool_plugin证据契约evidence_schema: core:run_report.v1凭据范围none无需任何密钥。在 tool-servers.md 的工具服务器目录中run_report的用途被描述为「Human-readable derived reports」并且明确指出该专题文档user-facing-reports-and-init.md是run_report的契约所有者涵盖自动/手动触发、结构、指标解释与规范状态边界。工具签名与返回结构tool_server:run_report在 Agent 会话内暴露generate_run_report。底层实现是 adapter.py 中的同名函数参数如下参数类型默认值说明run_dirstr \| NoneNone运行目录未提供时使用active_run_dir()基于PRAXIST_RUN_DIR或LOCAL_STORE_DIR环境变量task_dirstr \| NoneNone任务目录务必解析并传入否则报告会写到运行目录而非任务的docs/praxist_reports/triggerstrmanual_tool_call触发来源标识会写入报告文件与内容generation_idint \| NoneNone代际上下文会体现在文件名_genN后缀与报告内容中返回的 JSON payload 字段ok是否成功report_path生成的 Markdown 报告绝对路径pdf_pathPDF 伴生文件路径失败时为Nonetrigger、generation_id、report_kind。当run_dir与task_dir都未提供且环境变量不可用时返回ok: false与错误信息run_dir is required when PRAXIST_RUN_DIR or LOCAL_STORE_DIR is not set见 adapter.py。MCP 接线方式create_run_report_serveradapter.py基于claude_agent_sdk的create_sdk_mcp_server与tool装饰器构造一个名为run-report的 SDK MCP server将generate_run_report暴露为 MCP 工具工具参数 schema 为run_dir、task_dir、trigger、generation_id四个字段返回值以 JSON 文本形式放入{content: [{type: text, text: ...}]}。stdio 入口在main.py通过mcp.server.stdio.stdio_server运行同一 server 实例。测试test_codex_runtime_maps_run_report_server_directlytest_run_report.py验证了 Codex SDK 运行时会以python -m mcp_stdio_module直接拉起run_report.adapter:create_run_report_server。create_tool_pluginadapter.py返回注册器所需的插件描述符测试同时断言tool_server:run_report同时出现在DEFAULT_RESEARCH_TOOL_SERVER_REFS与PANEL_TOOL_SERVER_REFS中test_run_report.py。五、用 praxist-diagnostic 技能生成与诊断报告praxist-diagnostic技能可以在一次显式的运行健康分析中生成同一份报告。其 SKILL.md 的「Human-Readable Run Reports」章节给出了完整的使用约定内置报告面built-in run-report surface当活跃任务声明了tool_server:run_report时具备 panel/tool 能力的 Agent 可以直接调用generate_run_report生成所选运行的报告目录解析纪律先解析所选任务目录并传入task_dir否则报告可能写到运行目录而不是任务的docs/praxist_reports/Codex CLI 外部调用在运行中的 Agent 之外从 Codex 侧可以导入源码模块直接调用from praxist.plugins.workflow_stages.research_loop.backend.run_report import ( generate_run_report, ) generate_run_report( run_dir..., task_dirselected_task_dir, triggermanual_cli, )技能还规定了 CLI 展示顺序先打印简明摘要再列出每个生成或复用报告的绝对路径。诊断流程的可确定性前置收集优先运行技能自带的清单脚本run_diagnostic_inventory.pypython skills/praxist-diagnostic/scripts/run_diagnostic_inventory.py \ --task-path /path/to/task \ --run-dir /path/to/run \ --json技能同时要求区分「当时 Agent 看到的」prompt/agenda/leaderboard/evidence-pack 快照与「运行现在知道的」规范 result/frontier/Gems/boundary 状态这正是 Run Reports 派生视图哲学在诊断场景的延伸用审计快照重建历史视角用规范状态判断当前晋升、Gems、证据转移与 resume 的真实性。六、输出目录规则与文件命名输出目录解析_report_docs_root源码 run_report.py 的_report_docs_root逻辑为当task_dir提供且运行目录等于任务目录或位于任务目录之内时 → 输出到task_dir/docs/praxist_reports否则 → 输出到run_dir/docs/praxist_reports。测试test_report_uses_run_docs_when_run_dir_is_outside_task_dirtest_run_report.py验证当 run 目录在任务目录之外时报告写入run_dir/docs/praxist_reports且不会在任务目录下产生报告目录。文件名格式generate_run_report中生成的文件名为{YYYYmmdd_HHMMSS}_{run_name}_{trigger}{_genN}.md例如20261012_005619_run_2026-10-11_first_credible_baseline_beat_gen3.mdPDF 伴生文件为同名.pdf。run_name取运行目录名的安全 slug_safe_slug只保留字母数字与_-.最长 120 字符_genN仅在generation_id非负时追加。单事实面原则生成代码注释明确报告只在上述唯一目录写一份不复制到其他地方A copy is not written elsewhere to avoid multiplying fact surfaces。这是为了避免同一派生事实出现多个拷贝导致事实面分裂。七、证据采集与可信度判定源码深潜collect_report_payloadrun_report.py展示了报告的事实来源全貌数据源读取位置用途frontier manifestfrontier/frontier_manifest.jsonfrontier 条目、validation candidatesrun summaryrun_summary.json运行状态与健康orchestrator statusorchestrator_status.json经read_effective_orchestrator_status代际进度、退出条件Gems 状态gems/gems_state.json证据上下文代际边界gen_*/generation_boundary.jsonglob 遍历最新边界状态共享发现shared_findings/*.json最多 300 条信号来源结果摘要results/**/递归发现的summary.json、evaluation_summary.json、eval_summary.json、tiered_eval_summary.json、custom_*_tiered_eval_summary.json、兼容名result_summary.json最多 700 条结果信号基线task/assets/baselines/*.jsonlbaseline 比较任务指标注册表task.yaml/task_spec.yaml的evaluation、baselines、gems.result_metric_aliases指标方向与别名解析指标方向注册表_task_metric_registry报告从任务规范中收集指标方向来源包括evaluation.primary_metricevaluation.direction、evaluation.anchor_metrics、evaluation.frontier_lanes[].axes / optional_axes、baselines[].metric_name direction。合法的方向值只有maximize与minimize_VALID_METRIC_DIRECTIONS。gems.result_metric_aliases会构建别名图连通分量同一连通分量内的指标共享唯一方向若分量内出现相互冲突的方向如rmse声明minimize而别名validation_rmse声明maximize则该分量整体方向视为未知并记录 warning——绝不信任过期的逐条结果元数据见_metric_direction_for_namerun_report.py。测试test_task_metric_registry_rejects_conflicted_task_direction与test_task_metric_registry_drives_minimize_winners_charts_and_aliases分别验证了冲突拒绝与别名驱动的获胜者/图表行为。credible 与 signal 的划分_report_evidence_class每条 entry 被分为「credible可信」或「signal信号」两类任一条件命中即为 signal成熟度快照mature_enough is False带报告排除标记suspect、suspect_protocol、protocol_integrity_failed任一为 true存在持久晋升排除durable_promotion_exclusion非空带运行失败状态result_status/final_status/tier_status/status/eval_status命中坏状态如failed、protocol_integrity_failed等来源为result_summary/shared_finding/validation_candidate且未达到 mature。只有 credible 条目才能进入排名、触发 baseline 声明或驱动方向性图表signal 条目只能出现在「Strong Signals Requiring Validation」等明确标注的位置并附带block_reason如not_scored_complete、validation required、路由排除原因等。去重_dedupe_entries报告对来自不同视图result summary、shared finding、validation candidate、frontier的同一变体做去重优先按不可变结果工件 keyresult_artifact_keysource_result_sha256判定同一工件同一工件存在时带持久排除的版本会覆盖干净版本避免一条受限事实被干净视图掩盖。测试test_result_summary_wins_dedupe_over_matching_validation_view与test_report_dedupe_applies_routing_to_same_artifact_across_display_fields覆盖了这两种场景。八、写报告时容易被忽略的边界与最佳实践结合文档、源码与测试实践中需要注意以下要点始终传task_dirAgent 手动调用generate_run_report时先解析任务目录再传参否则报告落入 run 目录后续检索task/docs/praxist_reports/会落空SKILL.md 明确强调。不要手工编辑报告来改变运行事实每份报告结尾都有 Report Semantics 声明——This Markdown report is a derived human-readable view. Canonical facts remain in frontier, findings, result summaries, Gems state, and generation boundary artifacts. Do not hand-edit this report to change run truth.不要用报告驱动决策链路promotion 与 generation close 只能读取规范证据报告内的任何「获胜者」「信号」都只是给研究者看的摘要。方向未知的指标可以展示但不能比较报告会把它放进Unranked Frontier Entries (Direction Unknown)并在图表与 baseline 声明中排除。PDF 失败不必恐慌Markdown 报告仍会生成pdf_path为None即可这属于设计内的降级路径。任务指标声明是报告正确性的前提primary_metric、direction、anchor_metrics、frontier_lanes、baselines、gems.result_metric_aliases共同决定了方向解析与排名质量声明缺失或冲突时报告宁可标记 unknown 也不臆断。九、如何继续深入仓库导航报告生成核心实现run_report.py2417 行含触发、采集、渲染、PDF 写入全套逻辑工具服务器插件与 MCP 接线adapter.py、plugin.yaml、main.py诊断技能使用约定skills/praxist-diagnostic/SKILL.md「Human-Readable Run Reports」章节与清单脚本 run_diagnostic_inventory.py报告行为契约测试tests/unit/test_run_report.py覆盖触发、结构、PDF 降级、去重、方向解析、signal/credible 划分、Codex MCP 映射等 30 余个场景工具服务器全景docs/guides/tool-servers.md运行循环中的报告钩子generation_loop.py 与 startup.py。十、小结Run Reports 是 PRAXIST「证据所有者」与「证据读者」解耦设计的缩影规范证据result/finding 摘要、frontier manifest、Gems 状态、代际边界拥有全部事实并驱动晋升决策Markdown PDF 报告则负责把同一份事实翻译成研究者与诊断 Agent 可读的 A/B/C 摘要与图表。无论是自动触发首个可信 baseline 击败、每 3 代、终态还是通过tool_server:run_report/praxist-diagnostic手动生成报告的边界纪律始终如一——只读、派生、确定性、永不回喂决策。掌握这套体系你就能在任何 PRAXIST 运行中快速回答「进展如何、最强变体是谁、运行是否健康」而不会污染运行本身的科学决策。赞分享人工智能AI Agent多智能体Agent 工作流深度研究AI 评测【免费下载链接】PRAXISTAutonomous research system for measurable, computer-executable research.项目地址https://gitcode.com/gh_mirrors/pr/PRAXIST点击查看免费下载相关推荐SenseNova-Skills 深度研究 CLI 实战指南独立安装、Harness 编排与可恢复研究报告运行SenseNova Skills 深度研究 CLI 实战指南独立安装、Harness 编排与可恢复研究报告运行 本文围绕 SenseNova Skills 仓AI 技能人工智能深度研究数据分析媒体生成Praxist 入门指南把可运行研究项目变成多代自主研究循环Praxist 入门指南把可运行研究项目变成多代自主研究循环 Praxist 是一个面向可度量、可在计算机上执行研究问题的自主研究系统它把研究当作一个持人工智能AI Agent多智能体Agent 工作流深度研究AI 评测Label Studio Enterprise Support Reports 实战指南匿名化运维诊断报告的原理、生成与安全共享Label Studio Enterprise Support Reports 实战指南匿名化运维诊断报告的原理、生成与安全共享 Support Report数据标注人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

嵌入式半月刊:工具链、RTOS与串口通信的工程实践

嵌入式半月刊:工具链、RTOS与串口通信的工程实践

1. 嵌入式半月刊的定位与内容框架1.1 为什么选择半月刊这种形式做嵌入式开发的人都有一个共同的痛点:信息太散了。芯片手册动辄上千页,RTOS的文档更新频繁,各家IDE的版本迭代节奏又不一致,再加上社区里时不时冒出一些冷门但极其好…

📅 2026/10/12 20:00:37
Tkinter事件绑定完全指南:从bind到Event对象,构建精细GUI交互

Tkinter事件绑定完全指南:从bind到Event对象,构建精细GUI交互

接触 Tkinter 一段时间的人都会遇到一个坎:按钮的 command 参数只够应付“点击后做个动作”,一旦需要处理键盘快捷键、鼠标悬停、焦点变化、拖拽图形,甚至是某个区域被划过的细节行为,command 就不够了。这时候真正值得花时间吃透…

📅 2026/10/12 20:00:37
Verilog实现格雷码与二进制码双向转换:参数化设计、仿真验证与时序优化

Verilog实现格雷码与二进制码双向转换:参数化设计、仿真验证与时序优化

1. 为什么格雷码值得单独写一个Verilog模块做数字IC或者FPGA的朋友,迟早会碰到格雷码。这东西乍一看像是课本里为了考试而存在的概念,但真到了跨时钟域、异步FIFO、旋转编码器接口这些场景里,它就是绕不过去的硬骨头。我最初接触格雷码是在一…

📅 2026/10/12 20:00:37
MORE NEWS

更多资讯

📰

心脏病数据集分析预测实战:从数据清洗到模型部署的完整流程

简介:这份资源面向机器学习入门与进阶学习者,聚焦心脏病数据集的分析与预测建模实战,帮助读者在真实医疗数据上跑通从数据清洗到模型评估的完整流程。包内共14个文件,以11个Python源代码为主,另含2个CSV数据集与1个说明…

📰

从零到两万星:一套被AI助手推荐的开源AI编程教程设计复盘

1. 一个开源教程被AI助手推荐,这件事为什么值得聊先交代背景。我在一个开源社区维护了一套面向零基础开发者的AI编程入门教程,内容覆盖从环境搭建、第一个API调用、提示词工程基础,到用大模型做一个完整小项目的全流程。这套教程在代码托管平…

📰

Spring Boot + Vue打造果园水果预售系统:全链路设计与实践

前阵子帮一位做果园的朋友落地了一套水果预售系统,技术栈选的是 Spring Boot Vue。他说自家果园主打当季杨梅和水蜜桃,成熟期就那么三四周,以前靠朋友圈接龙接单,手写订单、人工对账、发货前挨个打电话问地址,每年都手…

📰

双Richards方程双渗模型:破解优先流模拟难题的实战指南

搞非饱和渗流的同行肯定都有这种感受:单一 Richards 方程在室内土柱实验里拟合得漂漂亮亮,参数一给,曲线走得顺顺当当;可只要一放到野外坡面、农田耕作层或者人为扰动的填土里,实测和模拟就开始“闹离婚”。尤其是下了…

📰

PPT Master 逐页逐对象动画定制(Customize Animations)阶段实战指南:从 `animations.json` 编排到 Morph 确定性配对

AI 技能人工智能 【免费下载链接】ppt-master AI 把任意文档生成真正可编辑的 PowerPoint —— 原生形状与动画、演讲者备注可合成音频旁白、还能参考你自己的 .pptx 模板,而不是一张张图片 何雨果出品 项目地址: https://gitcode.com/hugohe3/ppt-master 点击查看…

📰

Android 广播 - 组件通信

一、Service 通知 Activity 更新 UI 1、Service public class BroadcastConstants {public static final String ACTION_UPDATE_UI "com.example.ACTION_UPDATE_UI";public static final String EXTRA_DATA "extra_data"; }public class MyService exten…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬