获得方法的调用位置

365 阅读1分钟

背景

项目中,我们经常要获得方法的调用位置,那么下面的方法可以很好的解决此问题

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
    }

}