在熄屏状态下,Termux定时功能并不能很好地执行。
一个解决方案是触发器由第三方APP Task担当,调用Termux的脚本即可。
前言
- 可以先试试运行
termux-wake-lock
,防止设备睡眠,看能不能解决问题。 - 首先发现的问题是在熄屏状态下,Java调用Timer + Timer Task,时间到了基本不执行。
后来换了多种实现方式仍然有问题。 - 接下来发现Termux终端本身timeout/crontab等功能在熄屏状态也不能很好地执行。
- 可以想见,Android本身熄屏状态下对于程序的线程执行有所优化,这个问题有三种解决方案:
- 保持亮屏。耗电太多,感觉没啥意义了,就这不如直接用PC得了
- 使用Android本身计时的解决方案。原生APP解决方案是有的,但Termux模拟出来的终端到底如何去利用,是个问题
- 由某个原生APP来充当定时触发器,通过某种方式来调用Termux的特定脚本/程序。
官方给出了组合 Tasker + Termux:Task + Termux。
- 官方Wiki
- 一个例子
如何实现
准备工作
- 安装好
Tasker
- 安装好
Termux:Task
插件 - Termux中新建存放任务脚本的文件夹
mkdir -p ~/.termux/tasker
实现步骤
- 放入待运行的脚本
假定访问本地的某个URL发起请求cd ~/.termux/tasker echo curl http://127.0.0.1:8888/test >> test.sh exit
- Task调用
- Tasker添加任务
- 弹出对话框,选择插件
- 弹出对话框,选择termux:task
- 弹出对话框,选择准备好的脚本
- Tasker添加触发该任务的条件(定时等)