局部变量的解释就不多说了,直接说其中两个点:
1.局部变量储存在栈中而成员变量在堆内存中
2.局部变量:随着方法进栈而诞生,随着方法出栈而消失,局部变量:随着方法进栈而诞生,随着方法出栈而消失
val single = SingleLiveEvent<String>()
var y = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val bt = findViewById<AppCompatButton>(R.id.bt)
bt.setOnClickListener { onclicks() }
val bt1 = findViewById<AppCompatButton>(R.id.bt1)
bt1.setOnClickListener { onclick1() }
initview()
}
private fun initview() {
var i = 0
if (y == 0) {
i = 0
}
if (y == 1) {
i = 1
}
Log.e("mlt","............${i}.....")
single.observe(this,{
Log.e("mlt",".....222222.......${i}.....")
})
}
fun onclicks () {
y = 1
initview()
}
fun onclick1 () {
single.value = "1"
}
livedata是经过封装的,值在setValue的时候才会执行,那么点击onclicks之后再点击onclick1会打印什么?
2021-10-13 16:24:18.107 11482-11482/com.text.text E/mlt: ............0.....
2021-10-13 16:24:19.607 11482-11482/com.text.text E/mlt: ............1.....
2021-10-13 16:24:21.464 11482-11482/com.text.text E/mlt: .....222222.......0.....
2021-10-13 16:24:23.604 11482-11482/com.text.text E/mlt: ............1.....
2021-10-13 16:24:24.047 11482-11482/com.text.text E/mlt: .....222222.......0.....
2021-10-13 16:24:25.398 11482-11482/com.text.text E/mlt: ............1.....
2021-10-13 16:24:26.058 11482-11482/com.text.text E/mlt: .....222222.......0.....
最后一直都是0,为啥不是1呢,明明已经改变变量的值了,再livedata的时候没有改变呢?
其实根据上面的解释应该能明白 局部变量:随着方法进栈而诞生,随着方法出栈而消失
在第一次点击的时候值是改变的,但在第二次点击的时候,相当于已经重新调用方法,之前的变量已经出栈消失了,再次调用还是初始值!