广州在校大四程序猿一只,有志同道合的可以评论留个联系方式什么的,有空交流交流
Activity,算是安卓中最常出现的类了。Activity类的父类有Context、ContextWrapper、ContextTheme、Wraper等。
第一、activity主要属性:
1.name:activity的实现类的类名
2.icon:activity对应的图标
3.lable:activity对应的标签
4.exported:指定activity是否可以被其他应用调用,默认false,比如第三方组件的页面,微博分享等activity,希望可以被其它应用程序调用,就设置为true
5.launchMode:指定activity的加载模式:standard、singleTop、singleTask、singleInstance这4种加载模式,具体作用下面会有详解
6.<intent-filter>:指定activity可响应的Intent
第二、activity的生命周期
这张图片是最原始的图的。下面这段话有点啰嗦,没耐心的直接看图`-`
首先,在activity第一次被创建的时候会调用onCreate,在onCreate里面会加载activity的布局,之后会在onMesure里面设置布局的位置大小,所以在onCreate里面是获取不到组件的大小的。onCreate的时候,activity并没有启动,只有调用了onStart的时候,activity才会启动,这时activity变为可见但不可交互,接着调用onResume方法,这时activity变为用户可见并可交互(输入、点击等行为)。当当前activity被其它页面挡住的时候,例如有电话打进来,就会执行onPause,当执行完onPause后,如果经过很长的等待或系统内存不足的时候,这个activity就会被销毁,这时会执行onStop、onDestory。当在onPause状态下,假如这个时候还没有执行onStop就会直接调用onRestart,假如已经destory,那悲剧了,只能重新onCreate了,讲的好啰嗦。。。。。。直接看图较快。
第三:activity的加载模式:
1.standard:默认加载模式,每次启动activity的时候都会重新创建一个activity实例(hashCode不一样)并将该实例假如当前task栈中,并不会创建新的task栈
2.singleTop:task栈顶单例模式,启动的时候,假如当前task栈的栈顶有当前activity的实例,直接复用已有的实例,假如栈顶实例和当前的不一样,新创建一个实例。如:启动Activity A 然后启动activity B 此时task栈里的实例是BA,B在栈顶,此时如果再启动B,就不会再创建Activity B实例,所以启动完task栈还是BA,但如果启动Activity A,A和栈顶实例B不一样,就会创建一个新的ActivityA,此时栈中实例为ABA
3.singleTask:task内单例模式,假设此时task中是AB,再启动A,task中还是AB,但如果启动B,则会将task中在B上面的实例移出task栈使B位于栈顶,此时task中是B
4.singleInstance:全局单例模式,如果启动的Activity不存在,创建一个Activity的实例并放如一个新的task栈中。这个模式最特别的地方就是每个task栈中只有一个实例,所以启动的Activity一直位于栈顶。假如Activity已经创建过,则不会再被创建一次,会直接复用已经存在的。
。。。。好晚了,今天就先写到这里。。。。。。。。。