美文网首页IT之家Android开发Android知识
Activity启动模式和Fragment相关问题总结

Activity启动模式和Fragment相关问题总结

作者: 搅局者 | 来源:发表于2017-07-03 15:53 被阅读78次

    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的返回栈由系统管理,点击返回键,两者都执行销毁事件。

    相关文章

      网友评论

        本文标题:Activity启动模式和Fragment相关问题总结

        本文链接:https://www.haomeiwen.com/subject/bgtzcxtx.html