1、fragment的切换有多少种方式,有区别吗?
真正意义上有三种。
①remove()-->add()和replace()②hide()与show()③detach()与detach()
单独执行remove()再执行add()方法与直接执行replace()方法是同一种方式
replace():相当于先remove(),再add()。如果栈中是空的,则相当于什么也没有remove()掉,只执行了add()。也就是说,它始终让栈中只有一个fragment,栈中其它的fragment也会被移除掉。意思是其它的fragment实例会被回收。该方法每次都会新建fragment实例。
hide()与show()只会将原来的fragment隐藏掉,而将新的fragment添加到栈中。它是一种比较消耗内存的处理方式,但是却是最常用的一种方式,因为不会销毁fragment。但是当应用越来越大的时候,也不会多消耗多少内存。
attach()与detach()几乎不会用到。当调用方法detach()的时候,它不会销毁fragment,但是会将fragment中的view销毁掉。而attach()会为重新构建刚才销毁view的fragment中的view。比较鸡肋是因为它没有省多少内存,因为fragment并没有被销毁,只把view销毁了。内存没有省多少,但是却导致每次都要重新构建view,所以在实际开发中并不常用。
2、只要我们创建出了activity一定要在mainfest中声明吗?
3、activity有几种启动模式,你能熟练的知道他们各自的使用场景吗?
四种。Standard:默认的启动模式
SingleTop:要创建的activity已经处于栈顶时,复用此Activity
SingleTask:要创建的activity已经处于栈中时,弹出此Activity上的其它activity,让其处于栈顶
SingleInstance:全局单例模式,即只要整个系统中创建过此Activity的实例,不再创建
首先,假设栈中有三个activity。最下面是AActivity,中间是BActivity,最上面是CActivity,它处于用户的面前。假如此时点击CActivity中的按钮,它要再次跳转到CActivity,如果没有为CActivity设置特殊的启动模式,那么它默认的就是标准模式,这时它会又创建一个CActivity的实例,压入栈中,此时栈中就会出现两个CActivity。如果为CActivity设置了SingleTop模式的话,再创建CActivity的实例的时候,就会先遍历这个栈,看栈顶是不是CActivity,如果是,则复用这个CActivity,不再创建CActivity,如果不是的话才会去创建新的Activity。这就是SingleTop模式,也就是说要创建的activity已经处于栈顶,则复用此activity,否则的话和standard的启动模式是一样的。
singletask模式:还是假设在CActivity中有一个按钮,点击按钮后会创建AActivity,假设没有给AActivity设置启动模式的话,会再创建一个AActivity的实例压入栈中,但是如果为AActivity设置了SingleTask模式,那么再点击按钮后,会将CActivity、BActivity都弹出去销毁,此时AActivity就呈现在用户面前了。
singleInstance:就是一个全局的单例模式,只要这个activity被任何一个应用创建过,就再也不会创建第二个activity。这个常用于系统的activity,比如launcher、锁屏界面等等,这些界面只要有一个就够了。而自己开发的应用通常是不会用到singleInstance的。
4、实际开发中,对各种文件的命名有没有什么规范?
包的命名:首先创建activity包、application包、fragment包,这三个包分别存放activity、程序入口application,还有fragment,在实际开发中,类一定要严格地放在对应的包中,这样十分方便我们去查找。
类的命名:(HomeActivity)activity一定是以activity结尾,(ImoocApplication)application一定是以application结尾,(HomeFragment)而fragment一定是以fragment结尾的。这样一来寻找起来方便,二来,非常方便我们分模块来存放这些类。
布局的命名规范:
activity的布局:(activity_home_layout)首先是以activity开头,如果是布局,结尾一定是layout,中间呢就是以业务来命名,比如,这个是homeactivity的布局,中间就以home来命名它。
fragment的布局:(fragment_home_layout)fragment的开头一定以fragment开头,结尾因为是布局文件一定以layout结尾,中间也以业务来命名。
adapter中加载的view的布局:adapter中数据的命名方式,(item_product_card_two_layout),以item开头,以layout结尾。一看是item就可以知道布局用于adapter中的item中,中间以业务逻辑来命名
item的xml中view的命名规范:xml中view的属性都要用小写字母加下划线来命名,源码中就是这样来命名的
使用场景:
standard:默认的
singleTop:在我们的应用中需要重复启动这个activity,来减少activity的创建,来节省内存
sigletask:保证我们的应用开启后,只有一个activity的实例,这个模式常用的场景是home页,通常情况下homeactivity就是singletask模式
sigleinstance:主要是系统级的一些应用会用到