Activity启动模式:
1.standard启动模式:应用的默认启动模式,每次都创建新的实例。
2.singleTop启动模式:如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例,否则生成新的实例。这种启动模式通常适用于接受到消息后显示的界面,例如QQ接受到消息后弹出Activity,如果一次来10条消息,总不能一次弹10个Activity。
3.singleTask启动模式:如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
4.singleInstance单一实例模式:整个手机操作系统里面只有一个实例存在,并且这个实例独立运行在一个task中,并且在该task中不允许有别的Activity存在。应用时如果应用1的任务栈中创建了设定为singleInstance的Activity实例,如果应用2也要激活该Activity,则不需要创建,两应用共享该Activity实例。应用场景:呼叫来电界面,闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
Fragment优势:
1.fragment体现了碎片化管理,能够更好的解耦数据,独立的生命周期,更有利于调试与功能修。
2.很多项目大量使用Fragment做视图,组装更灵活,开销比Activity小。
3.在Fragment中监听返回键事件,可以避开多重Fragment重复叠加页面的困扰。
4.解决Activity间的切换不流畅,轻量切换
Fragment相关的主要操作:
1.FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
2.transaction.add();往Activity中添加一个Fragment。
3.transaction.remove();从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。
4.transaction.replace();使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体。
5.transaction.hide();隐藏当前的Fragment,仅仅是设为不可见,并不会销毁。
6.transaction.show(); 显示之前隐藏的Fragment。
7.detach();将此Fragment从Activity中分离,会销毁其布局,但不会销毁该实例。
8.attach();将从Activity中分离的Fragment,重新关联到该Activity,重新创建其视图层次。
9.transaction.addToBackStack(null);用于监听手机的返回键事件,但是要在transaction.commit()方法之前调用。Fragment的返回栈由Activity管理,Activity的返回栈由系统管理,点击返回键,两者都执行销毁事件。