Android埋點(diǎn)學(xué)習(xí)記錄

簡(jiǎn)單記錄下埋點(diǎn)幾種方案,詳情參考《Android全埋點(diǎn)解決方案》

采集信息

采集事件:頁面瀏覽事件/前后臺(tái)切換事件/點(diǎn)擊事件
設(shè)備id:
事件時(shí)間
屬性{
    庫版本
    app名稱
    app版本
    手機(jī)系統(tǒng):
    手機(jī)廠商
    手機(jī)型號(hào)
    系統(tǒng)版本
    屏幕寬度
    屏幕高度
    
    頁面全類名
    頁面名稱
    
    控件類型
    控件id
    控件名稱
}

頁面埋點(diǎn)

在application的onCreate中,注冊(cè)registerActivityLifecycleCallbacks
在onActivityResumed中提交頁面埋點(diǎn)信息谱秽。

多進(jìn)程前后臺(tái)埋點(diǎn)

跨進(jìn)程通信狀態(tài):
事件結(jié)束狀態(tài):切到后臺(tái)true,前臺(tái)false
切到后臺(tái)時(shí)間:onActivityPaused的時(shí)間
app啟動(dòng)uri

前臺(tái)
onActivityStarted->結(jié)束狀態(tài)為true->更新結(jié)束狀態(tài)為false->發(fā)送前臺(tái)事件

后臺(tái)
onActivityPaused->啟動(dòng)倒計(jì)時(shí),更新后臺(tái)時(shí)間
倒計(jì)時(shí)結(jié)束->發(fā)送后臺(tái)事件
onActivityStarted->
計(jì)算時(shí)差=當(dāng)前時(shí)間-切到后臺(tái)時(shí)間乒裆,
時(shí)差大于閾值并且結(jié)束狀態(tài)為false->發(fā)送后臺(tái)事件

取消倒計(jì)時(shí):
onActivityStarted->更新App啟動(dòng)uri為true
監(jiān)聽app啟動(dòng)uri變化->uri相等則取消倒計(jì)時(shí)

缺點(diǎn):
卸載會(huì)丟失后臺(tái)事件

事件埋點(diǎn)

代理View.OnClickListener

onActivityResumed->獲取到content->遍歷content->view有點(diǎn)擊事件->反射獲取view點(diǎn)擊事件,將原事件包裝季眷,將包裝事件設(shè)置到view

解決onResume之后動(dòng)態(tài)創(chuàng)建的View點(diǎn)擊事件:
onActivityResumed->獲取DecorView添加ViewTreeObserver.OnGlobalLayoutListener監(jiān)聽器秋茫,當(dāng)布局發(fā)生變化回調(diào)->走上面流程
onActivityStopped->移除監(jiān)聽器

缺點(diǎn):兼容性布疼,無法采集dialog等點(diǎn)擊事件

代理Window.Callback

當(dāng)用戶點(diǎn)擊某個(gè)控件時(shí)工猜,就會(huì)回調(diào)Window.Callback中的dispatchTouchEvent(MotionEvent event)方法米诉。
onActivityCreated->獲取Window.Callback->將callback進(jìn)行包裝->將包裝callback設(shè)置到window

處理事件:
遍歷decoreView->判斷view是否在點(diǎn)擊的坐標(biāo)內(nèi)->處理事件

缺點(diǎn):無法采集dialog等點(diǎn)擊事件,性能低,每次點(diǎn)擊時(shí),都需要去遍歷一次RootView

代理View.AccessibilityDelegate

view->performClick->sendAccessibibltyEvent

反射獲取view的AccessibilityDelegate->進(jìn)行包裝->回設(shè)給View
包裝AccessibilityDelegate->重寫sendAccessibibltyEvent->判斷事件狀態(tài)為點(diǎn)擊->處理

缺點(diǎn):輔助功能可能在部分rom會(huì)失效,反射效率低,無法采集dialog等點(diǎn)擊事件

透明層

onActivityCreated->將透明層(FrameLayout)添加到decoreView
透明層->監(jiān)聽onTouchEvent->down->獲取點(diǎn)擊坐標(biāo)范圍的子view->處理->
return super.onTouchEvent(event) 確保透明層不會(huì)阻斷事件

缺點(diǎn):無法采集dialog等點(diǎn)擊事件,性能低,每次點(diǎn)擊時(shí)篷帅,都需要去遍歷一次RootView

AspectJ

定義切面類->定義切點(diǎn)->方法增強(qiáng)@After 點(diǎn)擊事件->joinPoint.getArgs獲取到view->處理

缺點(diǎn):不支持lambda,無法織入第三方的庫,兼容性(D8史侣、Gradle 4.x)

ASM

1.定義Transform類(項(xiàng)目構(gòu)建階段,修改.class文件的一套標(biāo)準(zhǔn)API)拴泌,分別遍歷目錄和jar包進(jìn)行過濾
2.在visit方法獲取到class信息,visitMethod方法里獲取到method信息
3.判斷它所在的類實(shí)現(xiàn)了View.OnClickListener接口
4.在onMethodExit方法里進(jìn)行判斷,插入相關(guān)的代碼。

缺點(diǎn):目前無缺點(diǎn)

Javassist

·讀寫字節(jié)碼
和ASM類似

AST

自定義注解處理器->初始化獲取抽象語法樹->遍歷所有元素->如果類型為CLASS,獲取當(dāng)前元素的抽象語法樹->
自定義TreeTranslator處理每一個(gè)方法->如果方法包含onclick就插入代碼

缺點(diǎn):無法處理其他module,不支持lambda
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惊橱,一起剝皮案震驚了整個(gè)濱河市蚪腐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌税朴,老刑警劉巖回季,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異正林,居然都是意外死亡泡一,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門觅廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼻忠,“玉大人,你說我怎么就攤上這事杈绸√” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瞳脓,是天一觀的道長(zhǎng)塑娇。 經(jīng)常有香客問我,道長(zhǎng)篡殷,這世上最難降的妖魔是什么钝吮? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任埋涧,我火速辦了婚禮板辽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棘催。我一直安慰自己劲弦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布醇坝。 她就那樣靜靜地躺著邑跪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呼猪。 梳的紋絲不亂的頭發(fā)上画畅,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音宋距,去河邊找鬼轴踱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谚赎,可吹牛的內(nèi)容都是我干的淫僻。 我是一名探鬼主播诱篷,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼雳灵!你這毒婦竟也來了棕所?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤悯辙,失蹤者是張志新(化名)和其女友劉穎琳省,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躲撰,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岛啸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茴肥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坚踩。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瓤狐,靈堂內(nèi)的尸體忽然破棺而出瞬铸,到底是詐尸還是另有隱情,我是刑警寧澤础锐,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布嗓节,位于F島的核電站,受9級(jí)特大地震影響皆警,放射性物質(zhì)發(fā)生泄漏拦宣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一信姓、第九天 我趴在偏房一處隱蔽的房頂上張望鸵隧。 院中可真熱鬧,春花似錦意推、人聲如沸豆瘫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外驱。三九已至,卻和暖如春腻窒,著一層夾襖步出監(jiān)牢的瞬間昵宇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工儿子, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓦哎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像杭煎,于是被迫代替她去往敵國(guó)和親恩够。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 從去年和朋友一起做小程序開始羡铲,我開始對(duì)于產(chǎn)品的運(yùn)營(yíng)有了一個(gè)新的認(rèn)知蜂桶,今年又買了一本《數(shù)據(jù)化運(yùn)營(yíng):系統(tǒng)方法與實(shí)踐案例...
    jesseliu閱讀 999評(píng)論 0 0
  • 原創(chuàng)不易,轉(zhuǎn)載請(qǐng)著名出處也切,謝謝 一. 全埋點(diǎn)概述 事件類型事件定義AppStart應(yīng)用程序啟動(dòng)扑媚,包含冷啟動(dòng)/熱啟動(dòng)...
    ycl_blithe閱讀 5,204評(píng)論 0 21
  • 原文出自:http://www.reibang.com/p/dd253314ba6b 下面說得內(nèi)容會(huì)涉及幾個(gè)關(guān)鍵...
    蘇未_閱讀 1,278評(píng)論 0 0
  • 先說下自己對(duì)于這本的評(píng)價(jià)哈感覺這是一本很好用的工具書籍在全埋點(diǎn)這塊寫的很全面,有各種方式和實(shí)現(xiàn)流程但是有些時(shí)候又有...
    劉景昌閱讀 744評(píng)論 0 0
  • 什么是全埋點(diǎn)雷恃? 也叫做無埋點(diǎn)疆股,預(yù)先收集用戶的所有行為數(shù)據(jù),然后根據(jù)實(shí)際需求倒槐,從中提取行為數(shù)據(jù)旬痹。 采集數(shù)據(jù)的點(diǎn): $...
    豬_隊(duì)友閱讀 13,685評(píng)論 4 39