由于Auto.js目前的API都是同步的,要在屏幕中搜索某张图色或者某个控件时,必须无限循环查找,这实际上非常耗电。由于Rhino的限制,Auto.js无法直接提供异步API,这让Auto.js的脚本天生有一些缺陷。

为了解决这些问题,Auto.js Pro 8.0.0-3引入了两个新的API,来尽量减少图色模块和控件模块使用时的耗电。

图色模块的耗电优化

requestScreenCapture(options)

  • options {Object}

    • async {Boolean} 是否以异步事件的形式提供截图
    • width {Number} 截图宽度
    • height {Number}} 截图高度
    • orientation {String} 屏幕方向,"landscape"为横屏,"portrai"为竖屏,"auto"为自动

请求截图权限的参数中,增加了async的参数,这个参数运行我们以异步的方式,来获取屏幕截图。在以前,我们通过captureScreen()函数来获取截图,并无限循环地寻找目标图片,比如:

// 请求截图权限
requestScreenCapture();
// 读取目标图片
let target = $images.read("./test.png");
while (true) {// 获取屏幕截图let capture = $images.captureScreen();// 找图let pos = $images.findImage(capture, target);// 打印console.log(pos);
}

而使用async参数后,我们可以在"screen_capture"事件中获取到图片,例如:

// 请求截图权限, 注意参数 async: true
requestScreenCapture({async: true});
// 监听屏幕截图
$images.on("screen_capture", capture => {// 找图let pos = $images.findImage(capture, target);// 打印console.log(pos);
});

使用这样的方式,我们可以只在屏幕刷新时通过事件screen_capture唤醒代码,获取到最新的屏幕截图,并寻找目标图片。

实测在普通软件界面的找图中,CPU使用率减少了75%左右。

无障碍功能的耗电优化

与找图找色类似,在以前,Auto.js也一直只能通过无限循环去判断当前界面、寻找控件,这实际上对省电优化十分不友好。在Pro 8.0.0-3版本,我们引入了监听无障碍事件的API。

auto.registerEvents(events)

  • events {Array} 要监听的事件数组
  • 返回 {EventEmitter}

auto.registerEvent(event, callback)

  • event {String} 要监听的事件
  • callback {Function} 事件回调
  • 返回 {EventEmitter}

以上两个函数用于监听一个或多个无障碍事件。所谓无障碍事件,即(其他软件)窗口发送变化、控件发送变化时的事件,包括:

  • view_clicked 控件被点击
  • view_long_clicked 控件被长按点击
  • view_selected 控件被选中
  • view_focused 控件成为焦点
  • view_text_changed 控件文本改变
  • view_scrolled 控件被滑动
  • window_state_changed 窗口状态变化
  • window_content_changed 窗口内容变化
  • window_changed 屏幕上显示窗口的变化(增加,删除,子窗口变化等)
  • notification_state_changed 通知状态变化

例如,我们要监听Auto.js的打开,可以用以下代码监听:

// 监听窗口变化
auto.registerEvent('windows_changed', e => {// 判断是否有新窗口打开if (e.windowChanges.indexOf('add') >= 0) {// 获取新窗口的idlet wid = e.windowId;// 遍历窗口,获取新窗口let window = auto.windows.filter(w => w.id == wid);// 判断新窗口是Auto.jsif (window.length >= 0 && window[0].title == 'Auto.js') {toast("Auto.js被打开了!");}}
});

【Auto.js】使用Pro 8.0 API优化图色或无障碍的耗电问题相关推荐

  1. Auto.js Pro安卓免ROOT引流脚本开发系列教程07微信运动点赞(4)

    课程内容 翻页前判断是否在指定页面 翻页到达底部的处理 封装接口函数 开发环境与工具 开发环境:Visual Studio Code Auto.js:Pro 7.0.3-7 终端设备:红米NOTE5A ...

  2. Auto.js Pro安卓免ROOT引流脚本开发系列教程06微信运动点赞(3)

    课程内容 错误处理.跑偏处理 列表的翻页操作 开发环境与工具 开发环境:Visual Studio Code Auto.js:Pro 7.0.3-7 终端设备:红米NOTE5A高配版 设备分辨率:72 ...

  3. Auto.js Pro安卓免ROOT引流脚本开发系列教程05微信运动点赞(2)

    课程内容 判断是否在微信运动排行榜页面 遍历所有的点赞图标,执行点击 开发环境与工具 开发环境:Visual Studio Code Auto.js:Pro 7.0.3-7 终端设备:红米NOTE5A ...

  4. Auto.js Pro安卓免ROOT引流脚本开发系列教程04微信运动点赞(1)

    课程内容 Auto.js Pro初体验 如何分析节点信息 JavaScript语言规范 如何根据开发需求,查询开发文档 开发环境与工具 开发环境:Visual Studio Code Auto.js: ...

  5. Auto.js Pro安卓免ROOT引流脚本开发系列教程08微信运动点赞(5)

    课程内容 定义全局变量 调用全局变量 设置任务总数 设置每执行多少个,暂停多长时间 设置随机延时变量 开发环境与工具 开发环境:Visual Studio Code Auto.js:Pro 7.0.3 ...

  6. Auto.js Pro安卓免ROOT引流脚本开发系列教程02手机投屏并安装Auto.js Pro

    课程内容 - 手机投屏 - 安装Auto.js Pro 为了方便教学演示,这里我对红米手机做了投屏.同学们在实际开发中,是不需要投屏的. 红米手机投屏到电脑,我们在前面的课程中已经讲过.这里就不再重复 ...

  7. 【autojs】Auto.js Pro截图取色脚本源代码

    代码 /***完成时间: 2019年4月18日 下午9:42:35*测试机型: vivo PD1813D*Auto.js版本: 4.1.0 Alpha5*Android版本: 8.1.0*屏幕: 10 ...

  8. 按键精灵打卡怎么写_钉钉打卡脚本(基于auto.js)开发总结

    关于auto.js 官方对于autojs的介绍如下 "一个支持无障碍服务的Android平台上的JavaScript IDE,其发展目标是JsBox和Workflow.同时有VS Code ...

  9. Auto.js逆向分析-提取脚本文件(附源码)

    Auto.js:能在手机没有ROOT的情况下,制作各种运行于安卓的自动化脚本,类似手机按键精灵. 公众号中发送:AI小子,将获得一个AI学习大礼包的推送. 项目仓库地址: 码云: https://gi ...

最新文章

  1. Mysql报错Fatal error: Can#39;t open and lock privilege tables: Table #39;mysql.host#39; doesn#39;t...
  2. 解决vs2015使用fopen、fprintf等函数报错的问题
  3. stl string的erase方法
  4. gin HTTP/2 服务器推送
  5. CTFshow 命令执行 web43
  6. medianBlur函数
  7. 软件项目管理0716:责任分工明确
  8. 学习伟大的Python的第七天
  9. C/C++函数学习(6)容器分类
  10. python爬虫加密空间_Python爬虫进阶必备 | XX同城加密分析
  11. android继承父类的界面,Android调用父类方法,进行子界面刷新
  12. poj 2378 (dijkstra)
  13. 软件工程第四周作业 - 四则运算
  14. smale学习之数学表达式(day1)
  15. mysql dump hbase_mysqldump 导出部分数据库
  16. 关于Vue和Yii的作者国籍
  17. java/php/net/python驾校学员管理系统设计
  18. 高并发场景下秒杀系统的设计思路
  19. Android 访问系统相册选中图片,并返回该图片的路径
  20. 数据采集及传输名词解释——比特率、波特率、码率、帧率

热门文章

  1. 【C++】运算符重载 Operator Overload
  2. 十种经济的方法帮你建立企业品牌
  3. 如何发布一个npm包?
  4. 我的博客园第一个博客.
  5. poi excel设置合并单元格边框格式
  6. Nginx Install 记录
  7. 0311-操作系统实验0
  8. Miner3D 数据分析软件
  9. linux cp 强制覆盖
  10. econtrol窗体设计器