总结在android开发中,Activity视图相关的知识点:
- Activity四种启动模式与应用场景?
- fragment的添加(add)方法和替换(replace)方法的不同?
- Window、View、Activity区别?
- PopupWindow与AlertDialog的区别?
Activity四种启动模式
- standard
- singleTop
- singleTask
- singleInstance
standard模式
standard是activity默认的启动模式,不管有没有已存在的实例,每次新建都会生成新的实例。
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退出程序才会向下执行。
网友评论