-
Notifications
You must be signed in to change notification settings - Fork 2
Persistence and Background
AceGuru-mjh edited this page Oct 1, 2026
·
4 revisions
Android 上"永久后台"不可达。本项目的姿态是诚实降级: 用前台服务 + WorkManager 看门狗做能承诺的部分,并对不能承诺的部分明说。
| 组件 | 位置 | 作用 |
|---|---|---|
PersistenceEngine |
platform/persistence |
前台服务 + WorkManager 看门狗(被杀后自动拉起) |
ApexCoreService |
app/.../service/ |
前台 service,承载长任务与浏览器引擎 |
BootReceiver |
app/.../receiver/ |
开机 / 包替换事件后恢复后台链路 |
DreamRenderer |
platform/cs-mem |
WorkManager 周期任务:息屏 + 充电 + WiFi 时巩固记忆 |
ApexApp |
app/.../ApexApp.kt |
@HiltAndroidApp,启动时注入记忆写入 actor、梦境渲染器、Ubuntu 生命周期协调器、桥接服务、环境状态更新器 |
审计确认已具备:
| 项 | 状态 |
|---|---|
API 34 前台服务 specialUse 声明 |
✅ |
FOREGROUND_SERVICE_SPECIAL_USE 权限 |
✅ |
PROPERTY_SPECIAL_USE_FGS_SUBTYPE 属性 |
✅ |
| PendingIntent 标志 | ✅ 仅 1 处且带 FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
|
Android 13+ POST_NOTIFICATIONS
|
✅ 权限屏主动申请(否则通知静默不可见) |
DreamRenderer 必须同时满足:
屏幕关闭(息屏) + 正在充电 + 连接 WiFi + 电量 ≥ 50%
满足后做三件事:保鲜验证(随机挑低能宏真跑一遍)、熵衰减(全局 EntropyManager)、
拓扑迁移(TopologyMigrator)。不满足就不跑 —— 不做欺骗式前台规避。
| 数据 | 机制 | 特点 |
|---|---|---|
| 任务 checkpoint |
FileTaskStore:tmp 写 → fsync → 原子 rename |
崩溃安全;损坏文件移入 corrupt/(隔离不删除) |
| 会话 / 引导元数据 |
SessionMetadataStore / RootfsMetadataStore / BootstrapStateStore
|
同样改为 tmp + fsync + rename(T81 D-5) |
| 记忆图 | Room(schema v3) | 升级必须显式 Migration,仅降级允许 destructive |
| 设置 / Key | SharedPreferences;PAT 用 EncryptedSharedPreferences(AES-256-GCM) |
备份规则已排除两份 prefs(防止恢复后降级明文) |
| 场景 | 行为 |
|---|---|
| 任务中断 | 重启后 UI 横幅提示(任务标题 + 中断步骤),等用户显式选择继续或取消;PAUSED 不自动跑,CANCELLED 绝不自动继续 |
| 终端会话 | 恢复的是元数据;进程级 PTY 无法 reattach(fd 是进程本地)→ 会话状态如实标记为 EXITED / BROKEN,不伪造 RUNNING
|
| Ubuntu 引导 |
warmUp() 只 reconcile + 派生状态,零下载(用户没同意消耗流量前 App 不替用户做决定) |
| 限制 | 说明 |
|---|---|
| 会话跨 App 死亡存活 |
未实现。设计草案 TerminalSupervisorService(START_STICKY + partial wakelock),延迟理由:本环境无法验证 service 生命周期 / 进程死亡矩阵,拒绝发布未验证的生命周期服务 |
platform:persistence 的历史死代码 |
PersistenceEngine / WatchdogWorker 曾全仓库零调用;T76 明确不基于它建恢复
|
| 厂商省电策略 | 国内 ROM 常杀后台,需在"应用管理"里额外放行(自启动、后台运行、后台弹窗) |
| 现象 | 处理 |
|---|---|
| 悬浮球/通知消失 | 检查通知权限与前台服务通知是否被系统折叠;部分 ROM 需允许后台弹窗 |
| 梦境从不执行 | 约束未同时满足(尤其"充电 + WiFi");WorkManager 也可能被省电策略推迟 |
| 重启后任务横幅不出现 | 只有存在非终态任务时才提示;任务已 COMPLETED / CANCELLED 属预期 |
| 终端会话重启后不可用 | 预期行为:PTY 不可 reattach,需新建会话(见 §5) |
-
MCP 生态总览
新 - (沙箱 MCP · 官方 Hub · 逆向 Host · 门控语义)
- 终端运行时
- 终端 API 契约
- SDK 边界
- Termux 能力矩阵
- Ubuntu rootfs 供给
- Ubuntu 生命周期
- PRoot 二进制溯源
- VT100/ANSI 模拟器
- 终端性能
- 终端迁移
- 原生层 C++/JNI