MyWallet 保活工程流程图

com.wise.ledger.app · 1.0.2 · 基于反编译静态分析,未在真机复现

常驻保活 触发与调度 通知回流 降级与兜底 主路径 失败降级
MyWallet 保活工程流程图 三层结构:入口层 9 个触发源汇入场景分发器,经判定与节流后分发到常驻保活链与通知回流链,并附降级与兜底路径。 ① 入口层 · 触发源 ② 调度层 · 判定与节流 ③ 执行层 · 保活与通知 进程与前台:进程创建与回到前台时的保活修复入口 进程与前台 Application.onCreate 布下 Alarm,并尝试拉起前台服务 MainActivity.onResume 回到前台即修复常驻通知 前台轮询 60s 应用在前台时触发 TIMING 系统广播与闹钟:系统级唤醒入口,可在进程被杀后把体系拉回 系统广播与闹钟 开机 / 亮屏 / 灭屏 / 插拔电源 重排 Alarm 并修复常驻通知 解锁 USER_PRESENT 触发 UNLOCK 场景 · 间隔 20 分钟 Alarm 到点 setAndAllowWhileIdle · 间隔 40 分钟 用户行为与推送:前后台切换、广告点击与高优推送入口 用户行为与推送 HOME / RECENT / APP_EXIT 系统对话框广播 + Activity 计数 广告 onAdClicked 4 个广告回调点均有接线 FCM 高优推送 只作唤醒信号,不读标题与正文 全部汇入场景分发器 场景分发器 n7.d0:所有触发源统一汇入,按场景独立判定后再分发执行 场景分发器 n7.d0 9 个入口统一汇入,按场景独立判定 同场景并发用 AtomicBoolean 互斥 8 种场景: TIMING / UNLOCK / ALARM / HOME RECENT / APP_EXIT / AD_CLICK / PERMANENT 判定与节流:配置、状态、时间校准、权限通道与频道守护共 5 个模块 判定与节流(5 个模块) 配置解析 n7.h/g · 场景状态 n7.f0/e0 时间校准 n7.z · 权限与通道 n7.t 频道守护 n7.e/r: getImportance()==0 则随机换频道 ID 读取 / 校验 判定通过 → 按场景执行 常驻保活链 通知回流链 AccountingNotifyForegroundService:唯一的常驻理由 前台服务 · 常驻通知 9211 Android 34+ 走 specialUse,返回 START_STICKY startForeground 失败重试一次才 stopSelf 常驻通知:提供快捷记账入口 常驻通知构造 n7.x 频道 accounting_notify_persistent,不可划掉 按钮:新增支出 9212 / 新增收入 9213 文案轮换:多语言、多组文案循环使用 文案轮换 n7.k 内置 9 组文案与按钮,按场景轮转 服务端可下发 text / button / jump 覆盖 n7.i0:短时唤醒只为保证通知投递,不是持锁保活 灭屏 WakeLock 1s tag MyWallet:notify,仅灭屏时申请 PARTIAL_WAKE_LOCK + ACQUIRE_CAUSES_WAKEUP n7.d0.i:带按钮的场景化提醒通知 普通提醒 · 频道 NORMAL 通知 ID 按场景取 9101–9163 三段轮转 TIMING 30 / UNLOCK 20 / ALARM 40 分钟,日上限 10 n7.d0.h:媒体样式降级通道 MediaStyle 降级 · 9199 普通频道取不到时才启用,需 media 频道可用 固定通知 ID 9199 普通频道取不到时降级 降级与兜底 前台服务不可启动时的兜底路径 直接发通知 9211 兜底 startForegroundService 抛异常时触发 绕过前台服务,直接 notify(9211) 接收器退出后的排队投递兜底 IntentService 排队兜底 AccountingNotifyIntentService JobIntentService 形态,BIND_JOB_SERVICE