背景
项目中,我们经常要获得方法的调用位置,那么下面的方法可以很好的解决此问题
class GetMethodPositionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_get_method_position)
getMethodCallLocation()
}
/**
* 获取方法调用的位置
*/
private fun getMethodCallLocation(): String {
var result = ""
val start = System.currentTimeMillis()
try {
// 获取方法的栈信息,并且获取调用的位置信息,行数
val stackTraceElement = Thread.currentThread().stackTrace[3]
val position = stackTraceElement.toString()
val lineNumber = (stackTraceElement.lineNumber.toString() + "").length
// 获得方法名
val temp = position.substring(
0,
position.length - (stackTraceElement.fileName.length + lineNumber + 2 + 1)
).split(".")
val startStr = temp[temp.size - 1]
// 获取跳转的位置
val endStr =
position.substring(position.length - (stackTraceElement.fileName.length + lineNumber + 2 + 1))
result = "$startStr $endStr"
} catch (e: Exception) {
}
val end = System.currentTimeMillis();
Log.e("cdx", "方法耗時:" + (end - start))
Log.e("cdx", result)
return result
}
}