疑问一:android程序运行机制是怎样的?该看那些数来了解?
疑问二:如题:比如我的一个布局文件中有两个button,然后在onCreate中声明了两个引用变量指向这两个button,并注册监听器响应用户动作。我所疑惑的是在方法里定义的变量不是随着方法的结束而销毁的吗?就像以上的两个指向button的变量,那onCreate后变量不存在了还如何来监听用户动作? 还有就是activity在经历了oncreate,onstart,onresume方法后是处于一种什么样的状态?我的猜测是就是处在一种监听用户动作的状态了,但就像上面提到的方法内定义变量的疑惑那样,我认为界面上的组件(如button)不是应该定义为activity的成员变量才能成立才好理解吗?
望赐教!


activity 的view 回收_第1张图片

我觉得Activity创建好以后,其所对应的XML布局文件会在内存中建立好视图树对象层次结构(在内存的堆区);而在onCreate方法中使用 findViewById 方法,获得的是堆区中视图控件对象的指针。当onCreate方法结束后,只是销毁了onCreate方法内部定义的局部变量(栈区内存),并没有销毁堆区的内存,所以,视图控件仍然可以点击,并做出事件响应。(即activity对象堆区在oncreate()方法后就有成员变量view,该view的生命周期是跟随activity对象的不是随着oncreate()方法的)


oncreate中有个方法叫setContentView,每一个Activity都会加载一个视图,就是说有一个成员变量View,setContentView(View),就是给这个成员变量赋值,所以说oncreate里面定义的两个button虽说是局部变量,同时也是VIew这个成员变量的属性,Button btn = this.findViewById();这里用this来findView,说明button已经存在于activity中,btn这个局部变量是成员变量View通过Id找出来的,而不是new 出来的。