快捷app – Android 悬浮窗应用启动器

快捷app – Android 悬浮窗应用启动器

快捷app — ShortX 悬浮窗应用启动器

长按图标置顶常用应用 · 实时搜索 · 冻结管理 · Material You 深色主题


功能概览

网格启动面板
5 列网格展示已安装应用,400×420dp 悬浮窗,记住上次位置,拖拽标题栏移动
实时搜索
输入即过滤,100ms 防抖,支持应用名和包名匹配;面板顶栏和设置面板各有独立搜索入口
置顶应用
长按图标置顶或取消,最多 200 个,置顶列表持久保存
冻结 / 解冻
冻结标签页展示已冻结应用;点击冻结应用自动解冻后启动;需 root + pm freeze 命令
可见性设置
⚙ 面板控制哪些应用出现在启动器,支持全选 / 全不选 / 逐项勾选,设置持久保存
快速启动优化
两阶段启动:先渲染空面板(200ms 入场动画),后台扫描应用并分片加载图标,首屏 12 个应用优先显示

使用方法

  1. 触发方式:在 ShortX 中为本指令配置触发器(如桌面双击、手势、磁贴等),触发后弹出悬浮面板
  2. 启动应用:点击图标即启动;若应用已冻结,会先自动解冻再启动
  3. 置顶应用:长按图标,Toast 提示”已置顶”/”已取消置顶”
  4. 搜索:点击 🔍 按钮展开搜索框,输入关键词实时过滤
  5. 管理可见性:点击 ⚙ 按钮打开设置面板,勾选/取消勾选控制应用是否显示,支持搜索过滤
  6. 移动窗口:长按标题栏拖拽移动面板位置,松手自动保存
  7. 切换标签:顶部”正常”/”冻结”标签切换显示全部应用或已冻结应用

界面结构

┌──────────────────────────────────┐
│  应用      🔍  ⚙  ✕              │ ← 标题栏(可拖拽)
├──────────────────────────────────┤
│  🔍 搜索应用...              [✕] │ ← 搜索框(点击🔍展开)
├──────────────────────────────────┤
│  [ 正常 ]         [ 冻结 ]       │ ← 标签切换
├──────────────────────────────────┤
│  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐      │
│  │📱│ │💬│ │🎵│ │📷│ │⚙️│      │ ← 置顶应用
│  └──┘ └──┘ └──┘ └──┘ └──┘      │
│  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐      │
│  │❄️│ │  │ │  │ │  │ │  │      │ ← 全部应用
│  └──┘ └──┘ └──┘ └──┘ └──┘      │
│  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐      │
│  │  │ │  │ │  │ │  │ │  │      │
│  └──┘ └──┘ └──┘ └──┘ └──┘      │
└──────────────────────────────────┘

⚙ 设置面板(覆盖层):
┌──────────────────────────────────┐
│  显示设置                   ✕    │
│  🔍 搜索应用...              [✕] │
│  ☑ 微信          ☑ QQ           │
│  ☑ 设置          ☐ 某应用       │
│  ☑ 全部应用      ☐ 另一个       │
│  ────────────────────────────    │
│  [ 全选 ]  [ 全不选 ]  [ 关闭 ] │
└──────────────────────────────────┘

技术细节

运行环境与架构
  • JS 引擎:Rhino(ES5 语法,var 声明,JavaAdapter 绑定 Android View)
  • UI 渲染:WindowManager + TYPE_APPLICATION_OVERLAY 悬浮窗,全自绘界面
  • 线程模型:两个 HandlerThread — UI Thread 处理界面交互,Worker Thread 扫描应用和加载图标
  • 图标管理:Drawable → Bitmap 缓存(LRU,上限 50 个),异步加载避免阻塞 UI
启动流程

采用两阶段启动策略提升体感速度:

  1. 即时渲染(0ms):立即在 UI 线程创建空面板并添加到 WindowManager,播放缩放+透明度入场动画(180ms,从 0.92→1.0)
  2. 后台填充(50ms 延迟):Worker Thread 扫描已安装应用列表,完成后回 UI 线程刷新 GridView;首屏 12 个图标同步预加载,后续图标分批异步加载

冻结状态同步也分两阶段:先用 pm list packages -i 快速估算,260ms 后后台补齐真实冻结状态。

数据持久化

所有用户状态通过 Settings.Global 持久存储,重启后自动恢复:

  • 窗口位置:上次面板坐标,下次打开同位置
  • 当前标签:正常/冻结标签选择
  • 置顶列表:最多 200 个包名
  • 可见性映射:每个应用的显示/隐藏状态(新用户首次打开默认全部显示)
  • 错误日志:最后一次异常信息,便于排查
配色方案
  • 主色:#7C4DFF(蓝紫),用于标签选中、按钮、置顶标识
  • 表面:#2D2D3A(深灰),面板和卡片背景
  • 背景:#1A1A23(近黑),悬浮窗底色
  • 次色:#5C6BC0(靛蓝),默认图标色、辅助元素
冻结功能实现
  • 检测:通过 pm list packages -i 获取未安装(已冻结)包名列表
  • 解冻:执行 pm unfreeze <pkg>,解冻后 200ms 延迟自动启动应用
  • 冻结:执行 pm freeze <pkg>,从当前列表移除并刷新
  • 前提:设备需 root 权限或 ADB shell 权限
性能优化
  • 图标 Bitmap 缓存上限 50 个,每加载 10 次检查并清理多余
  • 首屏 12 个应用图标优先同步加载,剩余图标在 300ms 后分批异步加载
  • 搜索输入 100ms 防抖,减少高频过滤
  • 关闭面板时移除所有 Handler 回调并关停线程池,防止内存泄漏
  • 图标加载通过 ExecutorService(2 线程)并发,避免 UI 卡顿

环境要求

  • Android 设备
  • 安装 ShortX 环境
  • 悬浮窗权限
  • root 权限(冻结/解冻功能需要)

Powered by Rhino ES5 | Material You Design | ShortX

20260831202356403-ShortX-快捷app.txt
96.9K
© 版权声明
THE END
喜欢就支持一下吧
点赞0
评论 抢沙发
头像-阿然 - 折腾日记
欢迎您留下宝贵的见解!
提交
头像-阿然 - 折腾日记

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容