美文网首页项目Android基础
android 埋点实现方案 - 源代码篇

android 埋点实现方案 - 源代码篇

作者: 进击的杰爷 | 来源:发表于2017-04-22 10:26 被阅读184次

接上篇,看看部分源代码,没什么干货,已脱裤子的请绕路。

埋点记录类:Recorder.java

可以看到record方法,只是将埋点的存储动作(iLogCache.record)封装成 Runnable,然后通过持有的 Handler 对象 post 给 相应的 HandlerThread。HandlerThread 接受该消息后便执行该动作。

Recorder.java 职责分明,就只有record 方法,然后没了。

埋点发送类:Sender.java

可以看到 send方法,只是将埋点的发送动作(trySend 网络请求方法)封装成 Runnable,然后通过持有的 Handler 对象 post 给 相应的 HandlerThread。HandlerThread 接受该消息后便执行该动作。

这里加上了重试方法,发送失败会通过 Recorder对象再次存储起来,直至三次重试之后。

同样 Sender 也是职责分明,只负责发送 (send方法)。

埋点读取类:ReaderThread (线程)

埋点读取类只是简单的一直轮询数据缓存对象(ILogCache),当不为空的时候,通过埋点发送类(Sender)发送埋点。

最后,LogServiceV2.java

LogServiceV2 继承了Service。在init 方法里初始化了 Recorder,Sender,ReaderThread 这三个关键角色。

整个方案的源代码篇到此结束。

至于怎么用嘛,

startService,然后调用Recorder.record方法就可以了。实际项目里,也仅有LogServiceV2 与 Recorder 对外公开,而Recorder 更是一个单例,方便外层直接 getInstance().record()。

贴了代码,有没有清晰些呢,各位看官。

相关文章

网友评论

  • 448c7c59e6d3:ILogCache处理不讲一下?失败重发可是个大问题,你的方案在sender还得重新入库[坏笑],是还有一层缓存吗,如果是这样,就变成了缓存的管理问题
    进击的杰爷:1,ilogcache 没什么逻辑的,除了每次取出埋点时自动从库里删除埋点。
    2,sender重新入库,是避免在某些异常情况下,埋点无法及时发送,导致埋点丢失,入库是为了避免这种情况。
    3,能否生成model不是重点,重点在于 isSuccess,关系到是否需要重新入库~
    448c7c59e6d3:另外发送失败可能无法生成model哦

本文标题:android 埋点实现方案 - 源代码篇

本文链接:https://www.haomeiwen.com/subject/krxszttx.html