SimpleTouch:事件分发可以如此清晰

666 阅读2分钟

该库已经开源到github,地址github.com/AlexMahao/S…

一个用于监听android事件分发流程的库,两行代码即可在运行时期监听事件的分发流程。自动打印分发流程,并提供视图查看。

功能展示

控制台日志输出

图表形式查看

Sample

JSON格式查看

Sample

简介

SimpleTouch为了解决事件分发问题而诞生,该库可以在运行时期打印完整的事件分发流程。

  • 监听ViewdispatchTouchEventonTouchEventonInterceptTouchEvent
  • 运行时期动态打印事件分发流程。
  • 每一次完整的事件分发记录以json的形式写入文件。
  • 去重功能,对相同的move事件会自动过滤。
  • 提供no-op版本,使用时可区分debugrelease
  • 提供不同模式显示

使用

添加依赖

在项目的app下的build.gradle中添加依赖

debugApi 'com.spearbothy:simple-touch:1.0.7'
releaseApi 'com.spearbothy:simple-touch-no-op:1.0.7'

初始化

在项目的ApplicationonCreate()中调用初始化方法Touch.inject(this);

Touch.init(this, new Config().setSimple(false));

Config对象提供一些配置选项

public class Config {

    // 输出的日志以极简模式输出
    private boolean isSimple = true;
    // 是否延迟打印日志,延迟打印日志会在触摸事件结束之后打印,并且具有去重功能
    private boolean isDelay = true;
    // 是否保留重复的,默认不保留
    private boolean isRepeat = false;
    // 是否写入到文件
    private boolean isPrint2File = true;
    // 是否处理,不处理则不会监听任何方法,任何功能都无法生效
    private boolean isProcess = true;
}

注入代理类(用于监听事件分发)

ActivityonCreate()super.onCreate(savedInstanceState);之前调用.

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        Touch.inject(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRootView = (LinearLayout) findViewById(R.id.root);
    }

使用

编译完成之后,打开app,开始触摸吧!!! 每一次手指离开到触摸请间隔大于1s,目的是对于每次触摸加以区分,暂时没想到合适的判断条件。

流程图查看

下拉通知中可以看到SimpleTouch的入口

备注

  • 提供了no-op版本,该版本中包含有初始化和注入方法的空实现,以达到debugrelease使用不同的版本,使release不包含任何注入和初始化逻辑。
  • 在注入的时候有点耗时,如果页面过于复杂,会有种页面卡顿的感觉.

引用或借鉴的三方库

  • com.android.support:appcompat-v7
  • com.google.dexmaker:dexmaker
  • com.alibaba:fastjson
  • com.noober.background:core
  • com.yuyh.json:jsonviewer

关于

有任何疑问可以通过issue或者以邮件的形式发送到zziamahao@163.com