Skip to content

originem0/slowdown-android

Repository files navigation

SlowDown · 慢下来

SlowDown Logo

一次深呼吸,把此刻还给你

Android Release Tests License


这是什么?

你有没有过这样的时刻:本来只想看一眼,回过神来已经刷了四十分钟——而你甚至说不出刚才看了什么。

SlowDown 针对的就是这个时刻。它不在你打开应用时拦截你——拦截只会让人烦躁,然后卸载。它等到你已经陷入无意识滑动时,才弹出一个安静的深呼吸界面:跟着呼吸圆等几秒,然后由你自己决定,是继续,还是离开。

不是阻止你开始,而是帮你在沉浸中清醒。

那几秒钟不是惩罚,是把"选择"还给你——多数时候,人只是忘了自己还可以选。


为什么是 SlowDown?

与其他屏幕时间应用的区别

SlowDown 常见限时应用
干预时机 沉浸过程中定期唤醒 打开即拦截
干预方式 深呼吸暂停,去留自定 锁死、倒计时恐吓
隐私 全部本地存储,没有申请网络权限——数据想上传都做不到 常要账号、云同步
对用户的假设 你只是暂时忘了,提醒就够 你管不住自己,必须被管

核心理念

  • 过程中觉察:真正的问题不是"该不该打开",而是"刷了多久还没意识到"
  • 不制造焦虑:没有"你已浪费 X 小时"的审判,只有一次平静的呼吸
  • 决定权在你:深呼吸结束后,继续或离开都是你自己的选择

功能

四档干预力度

模式 行为
仅统计 只记录时长,不打扰
温和提醒 达到阈值后弹出深呼吸,等几秒可继续
严格限制 达到限额后全屏拦截;再打开会再次拦截
完全禁止 每次打开都全屏拦截

诚实说明:Android 不允许普通应用真正"杀死"另一个应用。严格模式的本质是持续拦截——每次回到目标应用都会被全屏警告挡住。这对绝大多数"鬼使神差点开了"的场景已经足够;如果你需要物理级封锁,这不是为你设计的工具。

深呼吸干预

  • 跟随呼吸圆的倒计时(3–30 秒可调)
  • 可设置替代去处:刷够了抖音 → 跳去读书应用
  • 自定义提醒语:弹窗里显示你写给自己的话

时长追踪(v1.2.0 重构)

  • 每应用每日限额(1–1440 分钟),80% 温和提醒,100% 按模式处理
  • 数据直接来自系统使用统计(UsageStats),单一数据源,可复现、不虚标
  • 统计在午夜自动翻转——熬夜党的"今日"不会赖在昨天

冷却机制

  • 全局冷却 1–30 分钟(默认 5 分钟),每应用可单独覆盖
  • 提醒之所以有效,恰恰因为它不频繁

短视频模式

抖音、B站这类应用刷视频时不切换 Activity,常规事件监听抓不到。开启短视频模式后每 30 秒主动检查一次。灭屏自动停止——不会在你口袋里点亮屏幕。

统计面板

今日时长与拦截次数、觉察率(选择离开的比例)、平均决策时间、周趋势、月度对比。

截图


下载安装

GitHub Releases 下载最新 APK 安装。

从 v1.1.x 升级的用户请注意:v1.2.0 起更换了签名密钥(旧密钥凭据曾意外进入版本历史,出于安全考虑已轮换)。直接安装会提示签名冲突,需要先卸载旧版再安装。本地数据(监控列表、统计记录)会随卸载清除,望谅解——这是一次性的。

系统要求:Android 10(API 29)及以上。


如何使用

1. 授权

必要权限 作用
无障碍服务 检测应用切换(仅订阅窗口切换事件,不读取屏幕内容
悬浮窗权限 保证弹窗能从后台弹出
使用情况访问 读取应用使用时长

MIUI / HyperOS 用户额外开启:自启动、后台弹出界面、电池策略设为"无限制"。应用内引导页会逐项带你设置。

2. 添加监控

打开 SlowDown →「应用」页 → 选中目标应用 → 设置干预模式和每日限额。刷视频类应用记得打开「短视频模式」。

3. 然后忘掉它

正常用手机。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 协议 开源。


Releases

Packages

Contributors

Languages