1.代码埋点:
埋点用于统计分析功能孩子操作的使用频率与使用习惯.
统一定义一系列常量字符串来标识操作。因为可能埋的点比较多,上传记录数据量较大,标识字符串不应该过长.多个属性"等符号分割拼接.
封装类包含保存,读取到sp文件的方法。sp也可以换成数据库.
SP的读写操作可能有线程并发问题
方法原子加锁ReadWriteLock。
http://www.cnblogs.com/liuling/p/2013-8-21-03.html
在具体的事件触发点调用TASK类中记录方法。
2.自动化埋点
http://blog.csdn.net/gykimo/article/details/24772853
原理是:定义一个BaseActivity,其他Activity都继承。
监听Activity的生命周期方法,判断可见状态。界面使用时长的埋点.
监听Activity的onDispatch()事件分发方法,返回true代表子View消费了事件。遍历DicorView,找到具体子View,记录子View路径来标识。
通过广播,将数据收集,统一处理。(觉得可以不必通过广播,但是通过消息队列能避免并发问题)
定义需要监听的子View路径,判断需要监听才产生日志。
存在的问题是:
某些View的路径一样(隐藏控件、弹出窗口或者浮动窗口),不同API版本(4.0及以下与4.0上)同一个View路径不同。
某些Activity必须继承一些特殊的Activity类,如XWalkView的XWalkActivity.
UI路径扫描工作大。UI变化频繁的话,修改埋点View路径列表代价大。
其他未知问题,总感觉在复杂的项目页面中还会有其他问题。。。这个就要入局看了,但是应该不是大问题。
http://blog.csdn.net/HHcoco/article/details/52250627
这个补充如何标识每个View,给每个View设置ID。
还有在Fragment中如何得到触摸点的坐标。
3.第三方埋点(诸葛IO,GrowingIO等)
参考http://blog.csdn.net/hhcoco/article/details/52243079
4.上传时机
在主Activity的onResume()中开启上传线程,一个小时内只开启一次。
其他想法,用定时器,或者Service.