Android Activity、Window、View三者之间的关系
来源:互联网 发布:电脑维修网站源码 编辑:程序博客网 时间:2024/06/07 13:36
一、简述如何将Activity展现在手机上
Activity本身是没办法处理显示什么控件(view)的,是通过PhoneWindow进行显示的
换句话说:activity就是在造PhoneWindow,显示的那些view都交给了PhoneWindow处理显示
1、在Activity创建时调用attach方法:
2、attach方法中会调用PolicyManager.makeNewWindow()
实际工作的是IPolicy接口的makeNewWindow方法
①、其中创建了一个window(可以比喻为一个房子上造了一个窗户):mWindow =PolicyManager.makeNewWindow(this);
②、在window这个类中,才调用了setContentView(),这是最终的调用
在Activity的setContentView方法中,实际上是调用:getWindow().setContentView(view, params);
这里的getWindow()就是获取到一个Window对象
为啥attch优先于onCreate调用,就是由于在attch方法中,会创建window,有了window才能调用setContentView
3、在IPolicy的实现类中创建了PhoneWindow:
①、由mWindow = PolicyManager.makeNewWindow(this);,
②、这里的makeNewWindow(this);方法中,返回的是:return sPolicy.makeNewWindow(context);
③、这个sPolicy实际是一个接口,其实现类是Policy,其中只是创建了一个PhoneWindow
4、在PhoneWindow的setContentView中向ViewGroup(root)中添加了需要显示的内容
①、PhoneWindow是继承Window的
②、setContentView这个方法中,需要先判断一个mContentParent是否为空,因为在默认进来的时候,什么都没创建呢
此时需要创建:installDecor(),DecorView是最根上的显示的
可以通过adt中的的tools中有个hierarchyviewer.bat的工具,可以查看手机的结构
③、DecorView:是继承与FrameLayout的,作为parent存在,最初显示的
④、下次再加载的时候,mContentParent就不为空了,会将其中的所有的view移除掉,然后在通过布局填充器加载布局
二、三者关系:
1、在Activity中调用attach,创建了一个Window
2、创建的window是其子类PhoneWindow,在attach中创建PhoneWindow
3、在Activity中调用setContentView(R.layout.xxx)
4、其中实际上是调用的getWindow().setContentView()
5、调用PhoneWindow中的setContentView方法
6、创建ParentView:
作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)
7、将指定的R.layout.xxx进行填充
通过布局填充器进行填充【其中的parent指的就是DecorView】
8、调用到ViewGroup
9、调用ViewGroup的removeAllView(),先将所有的view移除掉
10、添加新的view:addView()
- Android Activity、Window、View三者之间的关系
- View, Activity, Window三者之间的关系剖析详解
- 如何理解Activity,View,Window三者之间的关系
- Android Activity 、 Window 、 View之间的关系
- Android-Activity、Window、View之间的关系
- Android Activity 、 Window 、 View之间的关系
- Android的Activity Window和View三者之间的关系解析
- Android->Activity,View,Window三者关系
- View,Activity,Window三者的关系
- Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- (转)Android 中Activity,Window和View之间的关系
- Android 中Activity,Window和View之间的关系
- Linux 127.0.0.1无法ping通问题解决
- IDEA 常用快捷键
- c++多线程重点难点(三)Mutex
- Hbase单机模式安装教程
- JAVA视频网盘分享
- Android Activity、Window、View三者之间的关系
- python矩阵中matrix()和array()函数区别
- Java多线程--并发中集合的使用PriorityBlockingQueue
- 技术人如何才能做好绩效管理提升团队绩效?
- gensim中doc2vec调参
- js 使用正则判断某字符在字符串中出现次数
- echarts2 X轴左右滑动
- Java三年经验
- ABAP how to get Background Job Status Report Code