疑问一:android程序运行机制是怎样的?该看那些数来了解? |
|
楼主太纠结了,清空观点再去看Android的Activity生命周期
|
|
兄弟!这不是纠结,这是疑问啊,不明不白地被一些例程牵着鼻子走的感觉不好受!所以凡事都应该探个究竟!你说的activity的生命周期我大概都了解是怎么的来龙去脉,但就是不理解android程序里面的运行机制,如果你知道有介绍这方面的书籍,望推介啊。谢谢! |
|
大牛们求助啊!
|
|
activity在经历了oncreate,onstart,onresume方法后是处于一种什么样的状态? 说白了就是 界面和用户可以直接打交到了, 我也为此问题纠结了一段时间,后来写了程序实验了一下,作了个总结,
http://blog.csdn.net/huazai963184709/article/details/7864331 关于Activity 生命周期的,应该是可以看懂了,有举例 |
|
额,你博客上的知识我已经知道了,这里的重点是关于变量的生命周期及android的运行机制啊,兄弟! |
|
了解的朋友回答一下吧,小弟不胜感激!
|
|
onCreate()方法,变量?其实你可以联想一下main方法。。。
|
|
main()的话,程序执行完就结束啦,而这里的oncreate方法执行完之后activity还是处于等待中的,性质不一样的吧。 |
|
有朋友这样回答我的:
第一个问题,你看activity生命周期就可以了,android的程序反映到用户的眼中就是一个个activity. 我问的大概就是这个意思,但是: oncreate方法后button的引用变量失效,那么这时候的button上的监听器不是没用了吗?也就是说界面上在oncreate中声明的引用变量引用的组件无法响应用户的动作?但实际上它还可以响应用户动作的啊,就是这里我想不明白,最近看的android初学者的书里面的UI组件都是在oncreate里定义的引用,纠结。求解释。 |
|
20分 |
oncreate中有个方法叫setContentView,每一个Activity都会加载一个视图,就是说有一个成员变量View,setContentView(View),就是给这个成员变量赋值,所以说oncreate里面定义的两个button虽说是局部变量,同时也是VIew这个成员变量的属性,Button btn = this.findViewById();这里用this来findView,说明button已经存在于activity中,btn这个局部变量是成员变量View通过Id找出来的,而不是new 出来的。
如果我说的不对,请勿喷,伤不起,也可以一起学习下! |
我觉得最好的理解方法就是采用C++的方式来理解:变量,指针,内存,资源。楼主的学习态度很好,我也是这样走过来的
|
|
欣赏楼主的学习态度。 目前我也刚开始学android。 |
|
在整个生命周期中,Activity一直被系统引用,只要系统没有强制回收处于pause的Activity,那该activity就应该一直处于内存中,所以Button作为activity的成员变量也就一直存在,设置的监听也就一直存在了。
|
|
英语好的话,建议你自己到官网上看吧,比那些市场上的书什么的将的好多了,市场的书都在照抄SDK文档。。
|
|
用个指针的例子说明 你那个局部变量 当我们释放一个指针的是 是 free(point);point=null;
既然释放了 为什么还要指向null呢, 释放是告诉计算机 刚才在占用的那段内存可以使用了,但是我们可不可以假设在某一段时间内 实际上没有其他值覆盖那段内存,这时候 你没有给point=null;但是敲好调用了point 这时候 计算机 还是会读取point 指向内存的数据 以此 我说明,即使出了oncreate button销毁了 只是告诉虚拟机 那段内存可以回收,至于回不回收,是否立即回收,没办法知道,那是虚拟机的事情。所以这时候访问 依然可以成立,但是不能保证会所有时候都成立。 至于你说停留在哪个状态,楼上说的交互状态是正解。 至于机制,个人理解,就是各种activity之间的转换。 |
|
兄弟说的有理!非常有理,原来setContentView里为我们隐藏了一个view的成员变量啊(viewgroud?),那么它里面的button等组件的对象也就存在的了,只是这时候还没有被引用而已。而我们为了给相关的组件注册监听器就在oncreate里引用了,这个时候才可以操作button等组件,这些对象是find出来的而不是new出来的,解析的很好,我知道我的理解有没错误?同时也发现原来那个main.xml是这回事啊。谢谢啦。 |
|
最后在这里一并谢过大家的答复啦! |
|
我觉得Activity创建好以后,其所对应的XML布局文件会在内存中建立好视图树对象层次结构(在内存的堆区);而在onCreate方法中使用 findViewById 方法,获得的是堆区中视图控件对象的指针。当onCreate方法结束后,只是销毁了onCreate方法内部定义的局部变量(栈区内存),并没有销毁堆区的内存,所以,视图控件仍然可以点击,并做出事件响应。
|
|
兄弟说的有理!非常有理,原来setContentView里为我们隐藏了一个view的成员变量啊(viewgroud?),那么它里面的button等组件的对象也就存在的了,只是这时候还没有被引用而已。而我们为了给相关的组件注册监听器就在oncreate里引用了,这个时候才可以操作button等组件,这些对象是find出来的而不是new出来的,解析的很好,我知道我的理解有没错误?同时也发现原来那个main.xml是这回事啊。谢谢啦。这个哥们说的很对 如果不是view对象呢 还会一直被引用吗? |