耗时统计工具类

背景

有时候程序反应缓慢,会影响用户体验。因此需要获取这一系列操作的耗时时长来定位具体的原因。

代码实现

object TimeGapUtil {

    private val mQueue: LinkedList<TimeItem> = LinkedList()

    /**
     * 开始统计
     */
    fun add(title: String) {
        mQueue.offerLast(TimeItem(title))
    }

    fun reset() {
        mQueue.clear()
    }

    /**
     * 打印统计结果
     */
    fun print() {
        if (mQueue.size < 2) {
            return
        }
        val sb = StringBuilder()
        while (true) {
            mQueue.pollFirst()?.apply {
                val nextItem = mQueue.peekFirst()
                if (nextItem != null) {
                    sb.append("${this.title} -> ${nextItem.title}${nextItem.time - this.time} \n")
                } else {
                    Log.d(TimeGapUtil.javaClass.simpleName, sb.toString())
                    return
                }
            }
        }
    }

    class TimeItem(title: String) {
        var title: String? = title
        var time: Long = 0

        init {
            this.time = System.currentTimeMillis()
        }
    }
}

示例

fun test() {
	TimeGapUtil.add("1")
	fun1() //耗时500ms
	TimeGapUtil.add("2")
	fun2() //耗时500ms
	TimeGapUtil.add("3")
	fun3() //耗时100ms		
	TimeGapUtil.add("4")
	fun4() //耗时500ms
	TimeGapUtil.add("5")
	TimeGapUtil.print()
}

输出结果: 每一个间隔的时长

2 -> 1 : 500
3 -> 2 : 500
4 -> 3 : 1000
5 -> 4 : 500

你可能感兴趣的:(Android,常见工具类)