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

解决方案 »

  1.   

    楼主太纠结了,清空观点再去看Android的Activity生命周期
      

  2.   


    兄弟!这不是纠结,这是疑问啊,不明不白地被一些例程牵着鼻子走的感觉不好受!所以凡事都应该探个究竟!你说的activity的生命周期我大概都了解是怎么的来龙去脉,但就是不理解android程序里面的运行机制,如果你知道有介绍这方面的书籍,望推介啊。谢谢!
      

  3.   

    activity在经历了oncreate,onstart,onresume方法后是处于一种什么样的状态? 说白了就是 界面和用户可以直接打交到了, 我也为此问题纠结了一段时间,后来写了程序实验了一下,作了个总结,
    http://blog.csdn.net/huazai963184709/article/details/7864331   关于Activity 生命周期的,应该是可以看懂了,有举例
      

  4.   


    额,你博客上的知识我已经知道了,这里的重点是关于变量的生命周期及android的运行机制啊,兄弟!
      

  5.   

    onCreate()方法,变量?其实你可以联想一下main方法
      

  6.   


    main()的话,程序执行完就结束啦,而这里的oncreate方法执行完之后activity还是处于等待中的,性质不一样的吧。
      

  7.   

    有朋友这样回答我的:第一个问题,你看activity生命周期就可以了,android的程序反映到用户的眼中就是一个个activity.
    第二个问题,activity中的控件变量,比如button什么的,本来就应该作为成员变量定义,然后在oncreate方法中赋值.
    这样在所有的回调方法中都能调用.
    如果你在onCreate中定义局部变量,并且设置了点击监听,那么onCreate方法结束之后,这个局部变量确实是失效了,换句话说,"引用"已经没有了,但是这并不代表按钮不存在,只是你失去了调用这个按钮的方式而已.
    activity在经历了oncreate,onstart,onresume方法后,可以理解为一种与用户交互的状态,我问的大概就是这个意思,但是:oncreate方法后button的引用变量失效,那么这时候的button上的监听器不是没用了吗?也就是说界面上在oncreate中声明的引用变量引用的组件无法响应用户的动作?但实际上它还可以响应用户动作的啊,就是这里我想不明白,最近看的android初学者的书里面的UI组件都是在oncreate里定义的引用,纠结。求解释。
        还有第一个疑问我的意思是android从Dalvik开始如何加载类,初始化类等等到实例化类的机制该看那些书?是不是要看《android内核剖析》之类的?
      

  8.   

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

  9.   

    欣赏楼主的学习态度。 目前我也刚开始学android。
    对于这个我的理解是 : 既然是成员变量,不是局部变量,那么他的生命周期应该是伴随着activity的生命周期的。 
      

  10.   

    在整个生命周期中,Activity一直被系统引用,只要系统没有强制回收处于pause的Activity,那该activity就应该一直处于内存中,所以Button作为activity的成员变量也就一直存在,设置的监听也就一直存在了。
      

  11.   

    英语好的话,建议你自己到官网上看吧,比那些市场上的书什么的将的好多了,市场的书都在照抄SDK文档。。
      

  12.   

    用个指针的例子说明 你那个局部变量   当我们释放一个指针的是 是 free(point);point=null;既然释放了 为什么还要指向null呢, 释放是告诉计算机 刚才在占用的那段内存可以使用了,但是我们可不可以假设在某一段时间内 实际上没有其他值覆盖那段内存,这时候 你没有给point=null;但是敲好调用了point 这时候 计算机 还是会读取point 指向内存的数据以此 我说明,即使出了oncreate button销毁了 只是告诉虚拟机 那段内存可以回收,至于回不回收,是否立即回收,没办法知道,那是虚拟机的事情。所以这时候访问 依然可以成立,但是不能保证会所有时候都成立。至于你说停留在哪个状态,楼上说的交互状态是正解。至于机制,个人理解,就是各种activity之间的转换。
      

  13.   

    兄弟说的有理!非常有理,原来setContentView里为我们隐藏了一个view的成员变量啊(viewgroud?),那么它里面的button等组件的对象也就存在的了,只是这时候还没有被引用而已。而我们为了给相关的组件注册监听器就在oncreate里引用了,这个时候才可以操作button等组件,这些对象是find出来的而不是new出来的,解析的很好,我知道我的理解有没错误?同时也发现原来那个main.xml是这回事啊。谢谢啦。
      

  14.   

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