请先简单阅读下原文代码
https://blog.csdn.net/weixin_44618248/article/details/107086410
可以对照源代码在阅读本文同时可以看得更清晰一些
注⚠️:以下属于个人学习,理解 如果偏颇过深 非常欢迎在评论看到您的看法和想法
先看前一段代码
val startTimeLabel = newLabel() //标签
val endTimeLabel = newLabel() //标签
⬆️ 用于向 本地变量表1⃣️ 中插入变量时候使用
var startTimeIndex: Int = 0
⬆️ 用于记录 变量在 本地变量表1⃣️ 里面的位置
因为待会要从这个 本地变量表1⃣️ 里面去取数据
override fun onMethodEnter() {
super.onMethodEnter()
startTimeIndex = newLocal(Type.DOUBLE_TYPE)
⬆️ 通过 newLocal方法新建一个类型为 Double 的变量并记录它在 本地变量表1⃣️ 中的位置
startTimeLabel.let {
visitLabel(it)
}
⬆️ 记录label的顺序 表示在这一行开始
mv.visitLocalVariable(
"startTime",
"J",
null,
startTimeLabel,
endTimeLabel,
startTimeIndex
)
⬆️ 向 本地变量表1⃣️ 中声明变量 :
- 变量名称叫做startTime
- 类型为 J2⃣️
- 没有泛形
- 变量存活生命周期开始于 startTimeLabel
- 变量存活生命周期结束于 endTimeLabel
- 它的下标位置在 startTimeIndex
mv.visitMethodInsn(
Opcodes.INVOKESTATIC,
"android/os/SystemClock",
"currentThreadTimeMillis",
"()J",
false
)
⬆️ 在该字节码下一行插入