一.先私有化结构化方法
写法一
- 新建单例对象,惰性加载该方法
- 需要调用时直接通过类名调用
写法二
- 使用get()方法,返回一个这个类型的单例
当单例模式需要获取context时
class QuitTimer private constructor() {
companion object{
val instance by lazy {
QuitTimer()
}
}
fun init(context: Context) {
this.context = context.applicationContext
handler = Handler(Looper.getMainLooper())
}
private var context: Context? = null
private var listener: OnTimerListener? = null
private var handler = Handler(Looper.getMainLooper())
private var timerRemain: Long = 0
interface OnTimerListener {
fun onTimer(remain: Long)
}
fun setOnTimerListener(listener: OnTimerListener?) {
this.listener = listener
}
fun start(milli: Long) {
stop()
if (milli > 0) {
timerRemain = milli + DateUtils.SECOND_IN_MILLIS
handler.post(mQuitRunnable)
} else {
timerRemain = 0
if (listener != null) {
listener!!.onTimer(timerRemain)
}
}
}
fun stop() {
handler.removeCallbacks(mQuitRunnable)
}
private val mQuitRunnable: Runnable = object : Runnable {
override fun run() {
timerRemain -= DateUtils.SECOND_IN_MILLIS
if (timerRemain > 0) {
if (listener != null) {
listener!!.onTimer(timerRemain)
}
handler.postDelayed(this, DateUtils.SECOND_IN_MILLIS)
} else {
zero()
}
}
}
}