一、什么是Hook
Hook就是将程序某一片段截取下来,在前面加入自己的业务逻辑,然后继续执行原来逻辑的一种手段。
下面简单实现一个拦截Button点击事件的Hook方法,去修改getText()的内容。
查看onclickListener源码
修改text步骤如下:
1.监听 onClick,当用户点击按钮的时候-->onClick, 我们自己要先拦截这个事件(这里需要用到动态代理Proxy)。
2要监听的接口,监听什么接口,就返回什么接口。
3监听接口方法里面的回调。
返回的Object参数类型就是传进去的OnClickListener.class,InvocationHandler()里监听了接口里所有的回调,可以在需要拦截的方法里面加自己的逻辑。
下一步就是将setOnClickListener里面的对象换成我们自己的(这里需要用到反射)
找到view.class内部类ListenerInfo的mOnClickListener对象
这里执行方法传进来的对象view就是button。
最后一步,替换掉系统的mOnClickListener