Android 源码系列之<十一>从源码的角度深入理解AccessibilityService,打造自己的APP小外挂(下)

本文从源码角度探讨AccessibilityService的工作原理,包括事件消息的传递流程和系统如何判断何时发送事件。通过理解这一机制,开发者可以更好地利用AccessibilityService创建自定义APP小外挂。请注意合法合规使用。
摘要由CSDN通过智能技术生成

        转载请注明出处:http://blog.csdn.net/llew2011/article/details/52843637

        在上篇文章Android 源码系列之<十>从源码的角度深入理解AccessibilityService,打造自己的APP小外挂(上)中我们讲解了通过AccessibilityService实现自动安装APK小外挂的操作流程,如果你还没有看过上篇文章请点击这里。在这篇文章中我将带领小伙伴从源码的角度来深入学习一下AccessibilityServie的技术实现原理,希望这篇文章能给小伙伴们一点帮助,如果你对这块很熟悉了,恭喜你可以过本文了(*^__^*) ……

        在上篇文章中我们提到AccessibilityService是Service的子类,它的生命周期由系统来维护和管理的,该类的官方注解如下所示:

/**
 * Accessibility services are intended to assist users with disabilities in using
 * Android devices and apps. They run in the background and receive callbacks by the system
 * when {@link AccessibilityEvent}s are fired. Such events denote some state transition
 * in the user interface, for example, the focus has changed, a button has been clicked,
 * etc. Such a service can optionally request the capability for querying the content
 * of the active window. Development of an accessibility service requires extending this
 * class and implementing its abstract methods.
 * 
 *
 * <h3>Lifecycle生命周期</h3>
 * <p>
 * The lifecycle of an accessibility service is managed exclusively by the system and
 * follows the established service life cycle. Starting an accessibility service is triggered
 * exclusively by the user explicitly turning the service on in device settings. After the system
 * binds to a service, it calls {@link AccessibilityService#onServiceConnected()}. This method can
 * be overriden by clients that want to perform post binding setup.
 * AccessibilityService的生命周期是由系统专门管理的,它遵循service的生命周期流程,
 * 开启AccessibilityService需要通过用户在Android设备上的设置页面中明确的打开它,
 * 在系统绑定了该服务后会调用该服务onServiceConnected()方法,如果想要执行绑定流程该方法可以被重写。
 * </p>
 * <p>
 * An accessibility service stops either when the user turns it off in device settings or when
 * it calls {@link AccessibilityService#disableSelf()}.
 * 只有当用户在Android设备上的设置页面中关闭了该服务后或者是调用了AccessibilityService的disableSelf()方法AccessibilityService才会关闭。
 * </p>
 * 
 * ...省略部分说明...
 */
 public abstract class AccessibilityService extends Service {
      ......
 }
        通过官方注解我们知道AccessibilityService的生命周期是由系统来管理的,开启该服务是在Android设备上的设置页面中来开启,关闭该服务也是通过在设置页面来关闭的或者是调用AccessibilityService的disableSelf()方法。因为AccessibilityService是Service的子类,所以AccessibilityService拥有Service的所有可访问方法,在整体阅读浏览完AccessibilityService的源码后发现AccessibilityService只重写了onBind()方法,代码如下:
@Override
public final IBinder onBind(Intent intent) {
    return new IAccessibilityServiceClientWrapper(this, getMainLooper(), new Callbacks() {/** 省略 */});
}
        onBind()方法返回的是一个IAccessibilityServiceClientWrapper(以下简称IASCW)实例对象,该实例对象初始化的时候需要传递三个参数:Context,Looper和Callbacks,那为什么要这三个参数呢,这三个参数的作用分别是什么?IASCW又是何方圣神呢?目前我们只能猜测IASCW肯定是实现了或者是间接实现了IBinder接口,接着往下看该类的源码,如下所示:

                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值