android 埋點實現方案 - 源代碼篇

接上篇,看看部分源代碼,沒什么干貨,已脫褲子的請繞路。

埋點記錄類: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()。

貼了代碼,有沒有清晰些呢,各位看官。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第一次聽到埋點這名詞的時候,是在三年前,剛進某會時。 隨后一直接觸相關埋點需求的開發,然而,卻一直沒有好好的研究過...
    進擊的杰爺閱讀 5,692評論 2 7
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,573評論 25 708
  • java 接口的意義-百度 規范、擴展、回調 抽象類的意義-樂視 為其子類提供一個公共的類型封裝子類中得重復內容定...
    交流電1582閱讀 2,280評論 0 11
  • 身體一日不如一日,想想死亡和疾病正在向我靠近,還有那么多事還沒做。
    皚弁閱讀 267評論 0 1