Skip to content

AppSlim Analyzer v0.6.3 — 应用列表秒开 + 缓存一致性

Latest

Choose a tag to compare

@Horizen5 Horizen5 released this 01 Aug 07:37
· 1 commit to master since this release

Android 应用运行时分析与智能精简平台。

这一版重写了应用列表模块,从「扫一遍再显示」改成 MT 管理器式的四级架构,
并解决了纯缓存方案最大的隐患——缓存一致性。

⚡ 列表秒开:慢在哪,就绕开哪

原来的做法是启动时把所有应用的 APK 都解析一遍(Activity/Service 数量、图标全解),
应用一多就要等好几秒。问题不在「扫描慢」,而在一开始就不该扫这么多。

层 做什么 为什么
① 快速列表 getInstalledApplications(0) flag 传 0,不解析任何组件信息,几十毫秒返回
② Room 缓存 组件数量等重信息落库 二次启动直接读表,不碰 APK
③ 安装广播 PACKAGE_ADDED/REMOVED/REPLACED 补上「App 开着时装了新应用」的缺口
④ 懒加载 点进详情才做深度解析 用不到的信息一律不算

图标只解可见项 —— LruCache 缓存 400 张,卡片进入可视区才异步解码。
原来一次性解几百张 Bitmap,既慢又占内存。

排序放在组合层 —— 名称/可瘦身/最近更新/最近使用四种排序走 combine,
切换排序不触发任何重新扫描。

🔄 v0.6.3:缓存一致性

纯缓存方案有个隐患:刚装完的新 App 不在缓存里,列表就看不到它。

分两种情况:

  • 重新打开 App — 每次 refreshAppList() 都会重新调 getInstalledApplications,
    不是纯读缓存,所以新应用会出现(v0.6.2 已经是这个行为)
  • App 正开着的时候装了新应用 — 这就是 v0.6.3 补的洞

做法是在 Application context 上动态注册广播监听:

IntentFilter().apply {
    addAction(Intent.ACTION_PACKAGE_ADDED)
    addAction(Intent.ACTION_PACKAGE_REMOVED)
    addAction(Intent.ACTION_PACKAGE_REPLACED)
    addDataScheme("package")   // ← 少了这行收不到任何广播
}

两个细节:

  • 必须 addDataScheme("package") —— 这三个广播都带 package: 这个 data scheme,
    不声明的话过滤器不匹配,一条都收不到
  • 动态注册 + 挂在 Application 上 —— 静态注册在 Android 8+ 会被后台广播限制拦掉;
    挂在 Activity 上则会随页面销毁而失效

📊 增量更新,不做全量重扫

第二阶段的深度信息只对「缓存里没有」或「APK 路径变了」的应用重新解析,
而且每 25 个批量提交一次,避免频繁触发重组。


方法笔记:这套架构抽象成了可复用的方法,写在
dev-craft / 让 Android 应用列表秒开

大小:2.9 MB · 要求:Android 10+