你有没有过这样的时刻:本来只想看一眼,回过神来已经刷了四十分钟——而你甚至说不出刚才看了什么。
SlowDown 针对的就是这个时刻。它不在你打开应用时拦截你——拦截只会让人烦躁,然后卸载。它等到你已经陷入无意识滑动时,才弹出一个安静的深呼吸界面:跟着呼吸圆等几秒,然后由你自己决定,是继续,还是离开。
不是阻止你开始,而是帮你在沉浸中清醒。
那几秒钟不是惩罚,是把"选择"还给你——多数时候,人只是忘了自己还可以选。
| SlowDown | 常见限时应用 | |
|---|---|---|
| 干预时机 | 沉浸过程中定期唤醒 | 打开即拦截 |
| 干预方式 | 深呼吸暂停,去留自定 | 锁死、倒计时恐吓 |
| 隐私 | 全部本地存储,没有申请网络权限——数据想上传都做不到 | 常要账号、云同步 |
| 对用户的假设 | 你只是暂时忘了,提醒就够 | 你管不住自己,必须被管 |
- 过程中觉察:真正的问题不是"该不该打开",而是"刷了多久还没意识到"
- 不制造焦虑:没有"你已浪费 X 小时"的审判,只有一次平静的呼吸
- 决定权在你:深呼吸结束后,继续或离开都是你自己的选择
| 模式 | 行为 |
|---|---|
| 仅统计 | 只记录时长,不打扰 |
| 温和提醒 | 达到阈值后弹出深呼吸,等几秒可继续 |
| 严格限制 | 达到限额后全屏拦截;再打开会再次拦截 |
| 完全禁止 | 每次打开都全屏拦截 |
诚实说明:Android 不允许普通应用真正"杀死"另一个应用。严格模式的本质是持续拦截——每次回到目标应用都会被全屏警告挡住。这对绝大多数"鬼使神差点开了"的场景已经足够;如果你需要物理级封锁,这不是为你设计的工具。
- 跟随呼吸圆的倒计时(3–30 秒可调)
- 可设置替代去处:刷够了抖音 → 跳去读书应用
- 自定义提醒语:弹窗里显示你写给自己的话
- 每应用每日限额(1–1440 分钟),80% 温和提醒,100% 按模式处理
- 数据直接来自系统使用统计(UsageStats),单一数据源,可复现、不虚标
- 统计在午夜自动翻转——熬夜党的"今日"不会赖在昨天
- 全局冷却 1–30 分钟(默认 5 分钟),每应用可单独覆盖
- 提醒之所以有效,恰恰因为它不频繁
抖音、B站这类应用刷视频时不切换 Activity,常规事件监听抓不到。开启短视频模式后每 30 秒主动检查一次。灭屏自动停止——不会在你口袋里点亮屏幕。
今日时长与拦截次数、觉察率(选择离开的比例)、平均决策时间、周趋势、月度对比。
从 GitHub Releases 下载最新 APK 安装。
从 v1.1.x 升级的用户请注意:v1.2.0 起更换了签名密钥(旧密钥凭据曾意外进入版本历史,出于安全考虑已轮换)。直接安装会提示签名冲突,需要先卸载旧版再安装。本地数据(监控列表、统计记录)会随卸载清除,望谅解——这是一次性的。
系统要求:Android 10(API 29)及以上。
| 必要权限 | 作用 |
|---|---|
| 无障碍服务 | 检测应用切换(仅订阅窗口切换事件,不读取屏幕内容) |
| 悬浮窗权限 | 保证弹窗能从后台弹出 |
| 使用情况访问 | 读取应用使用时长 |
MIUI / HyperOS 用户额外开启:自启动、后台弹出界面、电池策略设为"无限制"。应用内引导页会逐项带你设置。
打开 SlowDown →「应用」页 → 选中目标应用 → 设置干预模式和每日限额。刷视频类应用记得打开「短视频模式」。
正常用手机。SlowDown 在后台安静计时,只在该出现的时候出现。
Q: 为什么不直接锁死应用? A: 强制戒断引发逆反,逆反导致卸载,卸载之后呢?SlowDown 赌的是另一条路:觉察一旦建立,比任何锁都耐用。
Q: 刷短视频时没有提醒? A: 给该应用开启「短视频模式」(30 秒主动检查)。
Q: 我的数据安全吗? A: 应用没有申请 INTERNET 权限——不是"承诺不上传",是技术上无法上传。所有数据存在本机,卸载即清除。
Q: 无障碍服务会读我的屏幕吗?
A: 不会。服务配置中 canRetrieveWindowContent="false",只订阅"窗口切换"这一种事件,拿到的唯一信息是前台应用的包名。
Q: 会影响电话、短信吗? A: 不会,系统关键应用自动排除。
Q: 弹窗等待时间能调吗? A: 设置中可调 3–30 秒。
git clone https://github.com/originem0/slowdown-android.git
cd slowdown-android
./gradlew assembleDebug # 调试包
./gradlew testDebugUnitTest # 76 个单元测试构建签名 release 需在 local.properties(已 gitignore)中配置:
RELEASE_STORE_FILE=your-release.keystore
RELEASE_STORE_PASSWORD=...
RELEASE_KEY_ALIAS=...
RELEASE_KEY_PASSWORD=...缺失时 assembleRelease 会产出未签名 APK 并给出警告。签名凭据永远不进版本库。
- 语言:Kotlin 2.2
- UI:Jetpack Compose + Material 3
- 架构:MVVM + Repository;时长统计为单一数据源设计(UsageStats),核心逻辑提取为纯函数并有完整单元测试
- 数据:Room(schema 版本化导出)+ DataStore
- 系统要求:Android 10+(API 29),targetSdk 35
| 文档 | 说明 |
|---|---|
| 功能说明书 | 用户操作手册 |
| 技术架构 | 系统设计与 v1.2.0 单一数据源重构 |
| 问题排查 | 常见问题与历史 Bug 档案 |
| 开发指南 | 代码规范、测试策略、发布流程 |
| 更新日志 | 版本历史 |
本项目基于 MIT 协议 开源。




