通过注解埋点
来源:互联网 发布:linux ls 命令 编辑:程序博客网 时间:2024/04/29 06:02
由于项目原来毫无框架可言,现在又需要获取程序的运行状态,考虑到工作量以及后续维护,现通过注解解决问题
1、控件都是通过setOnClickListener加监听的,现在要对所有的监听加上其运行时间
步骤 1、添加注解类
2、在BaseActivity中添加
InjectUtils.inject(this);
3、import android.app.Activity;import android.graphics.Path;import android.provider.SyncStateContract;import android.util.Log;import android.view.View;import java.lang.reflect.Field;/** * Created by 邱乾坤 on 2017/3/4. */public class InjectUtils { public static long CLICK_TIME; public static void inject(Activity activity) { intectEvents(activity); } private static void intectEvents(Activity activity) { Class<? extends Activity> clazz = activity.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { OnClick onClick = field.getAnnotation(OnClick.class); if (onClick != null) {//发现控件 int viewId = onClick.value(); View view = activity.findViewById(viewId); Class viewClass = view.getClass(); try {//通过源码发现Listener是封装在内部类的一个属性,通过反射获取内部类实例,在反射得到监听事件,再通过代理模式获取时间 Field field1 = viewClass.getSuperclass().getSuperclass().getDeclaredField("mListenerInfo"); field1.setAccessible(true); Object target = field1.get(view); // Class aClass = Class.forName(field1.getType().getName()); Field field2 = target.getClass().getDeclaredField("mOnClickListener"); field2.setAccessible(true); View.OnClickListener listener = (View.OnClickListener) field2.get(target); view.setOnClickListener(new MyClickListener(listener)); } catch (Exception e) { e.printStackTrace(); } } } } public static class MyClickListener implements View.OnClickListener { private View.OnClickListener listener; public MyClickListener(View.OnClickListener listener) { this.listener = listener; } @Override public void onClick(View view) { //CLICK_TIME = 0; CLICK_TIME = System.currentTimeMillis(); Log.e("onClick", CLICK_TIME + ""); listener.onClick(view); } }}对每个view加上注解即可
0 0
- 通过注解埋点
- Spring注解注意点
- 通过注解修改WSDL
- 通过注解修改WSDL
- 通过注解格式化 时间
- 通过注解配置Bean
- Spring 通过注解配置
- spring通过注解配置
- 通过注解约束参数
- 通过注解使用Hystrix
- 【Java】核心技术点之【注解】
- Java核心技术点之注解
- 技术点-SpringBoot-注解总结
- 【JAVA】核心点之注解
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- 通过注解初始化绑定View
- 线程通信、线程同步以及进城通信的真的搞懂了么
- c++多线程详解
- C++教程网Linux最佳入门
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- MySQL相关概念
- 通过注解埋点
- 【面试题】剑指offer-1-赋值运算符重载
- 谁先倒_GPLT
- Android中浏览器UA的生成策略
- HDU1166 敌兵布阵
- 解决uploadify上传插件在火狐及360急速模式下不兼容的问题
- 手动创建两个文本文件text1.txt,text2.txt,要求编程创建text3.txt,实现text1.txt和text2.txt文件中除去首行和末尾对应的数据相加
- 欢迎使用CSDN-markdown编辑器
- 申嵌嵌入式视频