美文网首页Android基础
Android四大组件之Activity

Android四大组件之Activity

作者: AndryYu | 来源:发表于2017-10-15 23:51 被阅读0次

    总结在android开发中,Activity视图相关的知识点:

    1. Activity四种启动模式与应用场景?
    2. fragment的添加(add)方法和替换(replace)方法的不同?
    3. Window、View、Activity区别?
    4. PopupWindow与AlertDialog的区别?

    Activity四种启动模式

    • standard
    • singleTop
    • singleTask
    • singleInstance

    standard模式
        standard是activity默认的启动模式,不管有没有已存在的实例,每次新建都会生成新的实例。

    standard模式原理

    singleTop模式
        singleTop模式:当对应的Activity实例位于栈顶,则重复利用,不生成新的实例;如果不位于栈顶,会重新生成一个实例。
        场景:这种启动模式通常适用于接受到消息和通知后显示的界面,例如QQ、新闻客户端接受到消息弹出的Activity,如果一次来10条消息,总不能一次弹出10个Activity。

    singleTask模式
        singleTask模式:如果发现有对应的Activity实例,则在此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象。
        场景:这种启动模式一般作为程序的入口点。

    singleInstance模式
        singleInstance模式:启用一个新的栈结构,将Activity实例放置于这个新的栈结构中,并保证其他Activity实例不能进入。
        场景: 这种启动模式适用于需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题。比如:A -> B(singleInstance) -> C,完全退出后,再启动首先打开的是B。

    Fragment的添加方法和替换方法

    添加
    transaction.add(R.id.fragment_container, oneFragment).commit();
        如果一个fragment已经添加进来的话,再次添加的话会报异常错误的,不能重复添加同一fragment,这是非常重要的特点。添加进来的fragment都是可见的(visible),后添加的fragment会展示在先添加的fragment上面,在绘制界面的时候会绘制所有可见的view,所以大多数add都是和hide或者remove同时使用的。

    替换
    transaction.replace(R.id.fragment_container, oneFragment).commit();
        替换会把容器中的所以内容全都替换掉,只展示当前加入的fragment,减少了界面的层级关系。

    Window、View、Activity的区别?

    Android窗口结构
    1、为什么要设计Activity、View、Window?
        Activity就像工匠,Window就像是窗户,View就像是窗花,LayoutInflater像剪刀,Xml配置像窗花图纸。Android根据他们不同的职能让他们各斯其活,同时也相互配合展示给我们灵活、精致的界面。为啥这样设计?因为这样的结构更好管理。就像为啥需要使用MVP、MVVM、各种设计模式一样。
    2、Activity工作过程是什么样的?
        以Activity启动过程为例,Activity启动时是通过Binder向AMS(ActivityManagerService)发请求,通过PIC启动Activity的。
    3、Window是什么?它的职能是什么?
        Activity要管理View需要通过Window来间接管理的。Window通过addView()、removeView()、updateViewLayout()这三个方法来管理View的。
    4、View跟Window有什么联系?
        View需要通过Window来展示在Activity上。
    5、Activity、View、Window三者如何关联?
        Activity包含了一个PhoneWindow,而PhoneWindow就是继承于Window的,Activity通过setContentView将View设置到了PhoneWindow上,而View通过WindowManager的addView()、removeView()、updateViewLayout()对View进行管理。Window的添加过程以及Activity的启动流程都是一次IPC的过程。Activity的启动需要通过AMS完成;Window的添加过程需要通过WindowSession完成。

    参考文献
    Android窗口机制(一)初识Android的窗口结构
    Activity、View、Window的理解一篇文章就够了

    PopupWindow与AlertDialog的区别?

        Android中的对话框有两种:PopupWindow和AlertDialog,他们都能实现弹窗功能。
    AlertDialog:非阻塞式对话框,AlertDialog弹出时,后台还可以做事情;
    PopupWindow:阻塞式对话框,PopupWindow弹出时,程序会等待。在PopupWindow退出前,程序一直等待,只有当我们调用dismiss方法后,PopupWindow退出程序才会向下执行。

    相关文章

      网友评论

        本文标题:Android四大组件之Activity

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