第一步:新增依賴
debugimplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
第二步:沒了
androidmanifes.xml 的路徑為 :leakcanary-object-watcher-android/src/main/androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
我們找到這個類,發現是乙個封閉類
//找到 oncreate 方法
override fun oncreate(): boolean
} sharklog.logger = defaultcanarylog()
checkmainthread()
return
}//上面是一些判斷邏輯,主要看下面幾行
//檢測activity
//檢測fragment
}//我們來分析activity的 -> activitydestroywatcher.kt
companion object
}private val lifecyclecallbacks =
//利用委託,不實現其他的生命週期方法,只關注其 destroy 方法
override fun onactivitydestroyed(activity: activity) received activity#ondestroy() callback")}
}}**
* watches the provided [watchedobject].
* * @param description describes why the object is watched.
*/@synchronized fun watch(
watchedobject: any,
description: string
) //注意觀察這個方法
removeweaklyreachableobjects()
val key = uuid.randomuuid()
.tostring()
val watchuptimemillis = clock.uptimemillis()
val reference =
keyedweakreference(watchedobject, key, description, watchuptimemillis, queue)
sharklog.d ") +
(if (description.isnotempty()) " ($description)" else "") +
" with key $key"
}
//把當前這個 reference 加到 map 裡面
watchedobjects[key] = reference
checkretainedexecutor.execute
}//這個方法叫 移除弱引用可達的物件,***我也不知道啥意思
//說人話: 就是從這個queue中取這個 ref ,如果能取到,說明這個 ref 將要被 gc,這個時候就沒有發生洩漏,我們就可以在 watchedobjects 中刪除掉這個 key。
private fun removeweaklyreachableobjects()
} while (ref != null)
}@synchronized private fun movetoretained(key: string)
}}困了,就先這樣。
女人都看一下吧
愚笨的 女人打擊男人 聰明的女人激勵男人。愚笨的女人盯著男人的缺點,老是生氣 聰明的女人欣賞男人的優點,很是 開心。愚笨的女人不分場合與男人爭吵,弄得男人很沒面子 聰明的女人在外人面前給足男人面子,私下再對男人嚴加管教。愚笨的女人貶低男人 她忘了 貶低男人就是貶低自己 聰明的女人讚賞男人 她明白 讚...
2023年總結一下吧
2021年了,時間真快,今天閒來無事,對過去的2020年做個簡單的總結 1 2020年,年初和年末,都被疫情干擾了,沒辦法,小小的病毒,把人類幹得一團糟,希望疫苗的出現,可以為人類挽回顏面。2 2020年復工初始,豪言 換一台漢蘭達,沒有實現,失敗。3 39歲的 老年人 寫了一年的 說輕鬆呢?還是累...
認識一下偽 吧
今天我希望在畫家的路上走走,驚嘆於css的神奇之餘,發現我對類似 的東西好陌生,於是乎,讓我們來認識一下它吧。first line 用於向文字的首行設定特殊樣式 first letter 用於向文字的首字母設定特殊樣式 font color background margin padding bor...