Activity 的 Window 创建过程 Activity Window创建最终在ActivityThread 中的performLaunchActivity方法中,调用Activity的attach...、Window关系 一句话概括,Activity像工匠,View像窗花,window像窗户,LayoutInflater像剪刀,Xml像窗花图纸。...Activity根据他们不同职能,并且与他们相互配合像我们展示灵活与精致的界面 View如何与Activity进行关联 View并不是直接与Activity关联,而是通过Window这个中间人,Window...才是直接关联到Activity上的 Window如何与Activity进行关联 每一个Activity包含一个PhoneWindow,并且PhoneWindow是抽象类Window的子类,setContentView...让View与Window关联,Activity与Window关联 总结 Activity包含一个PhoneWindow,而PhoneWindow继承Window,Activity通过setContentView
(PS:源码基于Android5.1,cm12.1) Activity的onContentView 首先查看Activity的onContentView的方法: //Activity.java public...getWindow().setContentView(layoutResID); initActionBar(); //这是初始化actionBar,我们不关注它 } public Window...PhoneWindow.setContentView public class PhoneWindow extends Window implements MenuBuilder.Callback {...params) { // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window...通过WindowManager添加在Activity所挂在的Window上进行展现。
2 剖析内部 第一步 在Activity#attach中,可以看出创建了一个PhoneWindow对象,并且通过context.getSystemService(Context.WINDOW_SERVICE...)设置了WindowManager对象,还通过Window#getWindowManager对Activity的mWindowManager赋值,这样Activity就与Window#WindowManager...parentWindow) { // 将传递的 window对象保存, 对于activity来说,会将PhoneWindow对应的对象传入, 而对于 Context.getSystemService...时我们看见的窗口,接下来看在Activity的Window是怎么显示出来,看Activity.makeVisiable: void makeVisible() { if (!...到此Activity的Window,就完成了创建,显示。 小贴士 本文版权归Open软件开发小组所有,如需转载请联系主编申请授权。
我们看到显示的每个Window(包括对话框、全屏的Activity、状态栏等)都有他自己绘制的Surface。...同样,我们还是以是否存在这个问题为切入点,去理清Activity与Window关系。 前面我们知道,Window已经是系统管理的窗口界面。那么为什么还需要Activity呢?...我们把Activity所做的事情,全部封装到Window不就好了? 其实,本质上讲,我们要显示一个窗口出来,的确可以不需要Activity。悬浮窗口中不就是没有使用Activity来显示一个悬浮窗吗?...既然如此,Window(以及View)能处理点击事件以及封装各种逻辑,那为啥还需要Activity呢?...为了让大家能简单、快速的开发应用,Android通过定义Activity,让Activity帮我们管理好,我们只需简单的去重写几个回调函数,无需直接与Window对象接触。
PhoneWindow:Window唯一实现类。Window是一个抽象概念,是添加到WindowManager的根容器。...从启动Activity说起 第一个部分是启动Activity到创建出ViewRootImpl。 ?...小结:当Activity准备显示时,会测量Window和添加Window,创建出WMS服务对应的WindowState,Surface和native Surface。...再回到Activity的生命周期onCreate,调用setContentView创建一个不可见的DecorView,当ActivityThread.handleResumeActivity -> Activity.makeVisible...总结 Activity启动时除了通过ViewRootImpl读取各个参数确定Window的大小,位置等等,通过WMS创建出相应大小的Surface和一块共享内存,等待DecorView通过Canvas绘制画面
本篇主要介绍Window相关面试要点,常见Window属性,Window、Activity、View之间的关系。更多其他完整面试专题,请关注公众号获取. 1、Window是什么?...表示一个窗口的概念,是所有View的直接管理者,任何视图都通过Window呈现(点击事件由Window->DecorView->View; Activity的setContentView底层通过Window...7.Activity、Window、DecorView、View之间的关系 每个Activity 包含了一个Window 对象,这个对象是由PhoneWindow做的实现。...即使Activity的布局已经成功添加到DecorView中,DecorView此时还没有添加到Window中 ActivityThread的handleResumeActivity方法中,首先会调用Activity...中——和Activity一致(setContentView) 将DecorView添加到Window中并显示——在Dialog的show方法中,通过WindowManager将DecorView添加到Window
序言 很多人都会用Activity、Window、View,但是你知道他们是怎样加载出来并呈现在你眼前的吗?你知道他们之间有着鲜为人知的关系吗? ?...在这个例子当中,画板就好比Activity,纸就好比Window,而笔就是View,我们所看到的就是这幅画,是通过笔一点一点画出来的,在哪里画呢?当然是纸上了,而最终承载这幅画的东西就是画板了。...Window的创建过程 上面通过performLaunchActivity方法生成了一个Activity,我们来看看是怎样生成的: 1ActivityThread类: 2 3private Activity...方法中创建了一个Window,这个Window就是我们经常听到的PhoneWindow View的创建过程 我们大胆的猜测一下,View应该是被添加到Window中的,那么我们来看一下,到底是怎样添加的呢...a.mFinished && willBeVisible) { 8 r.window = r.activity.getWindow(); 9 View decor =
我们都知道布局文件的加载是在Activity的onCreate()方法中,使用setContentView进行加载 这个方法是个重载方法 ?...直接创建了一个PhoneWindow对象, 那么意味着 每创建一个Activity都会创建一个PhoneWindow对象 那么PhoneWindow与Window到底是什么关系呢? ?...PhoneWindow是Window的子类 那么到此为止, 我们知道了其实Activity中的setContentView实际上是PhoneWindow在处理 我们找到PhoneWindow.java能发现其对应的方法...咱们平常开发时在xml中写的布局并不是根结点, 而是contentParent的子view 总结 它们之间的关系可以大致理解为: Activity: 相当于一栋房子 Window: 相当于房子里的一扇窗户...View: 相当于窗户上的一朵窗花 它们三个的创建顺序为: Activity--->Window--->View 具体时序图如下: ?
文章有点长,首先要理解Activity、View、Window,我提出了一些问题,这篇文章可以解答如下问题: 1、为什么要设计Activity、View、Window?...2、Activity工作过程是什么样的?(理解Activity) 3、Window是什么?它的职能是什么? 4、View跟Window有什么联系?...5、Activity、View、Window三者如何关联? 为什么要设计Activity、View、Window?...每一个Activity都包含了唯一一个PhoneWindow,这个就是Activity根Window(之所以是说根Window是因为在它上面可以增加更多其他的Window,例如:弹出框(dialog))...4、View跟Window有什么联系? View需要通过Window来展示在Activity上。 5、Activity、View、Window三者如何关联?
01 理解Activity View window的关系 Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸...Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。...比如TextView,Button等 这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。
); } } 不是要分析setContentView(R.layout.activity_main)为什么注释掉呢,,先别急,我们先运行一下,居然没有崩溃,只是得到一个空白内容页面(这个显示跟Activity...其实该系列的第一篇就提到了一些,在第一篇Android开发之漫漫长途 Ⅰ——Android系统的创世之初以及Activity的生命周期 的最后我们就提到了Activity的创建工作是在android.app.ActivityThread...又得到我们熟悉的HelloWorld界面,这个界面的层级图上一篇文章Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(1)已经上过了这里我们重新上传一下更详细的。...我们的setContentView(R.layout.activity_main);内部把activity_main.xml文件解析成View,并把该View添加到contentView。 ?...(R.layout.activity_main) * 逻辑这么简单吗?
好吧,让我稍微撩起一点Activity神秘的面纱。 ---- 在此之前我们要先猜想一波,Activity是以什么形式显示的呢?...我们知道Windows有Window(窗口)这个概念,其实在Android中也有这个概念,与Windows的窗口有着类似的含义。...Android中的所有视图,不管是Activity,Dialog,还是Toast都是附加在Window上展示的。介绍了Window,开始介绍如何操作Window(Window是个抽象类)。...WindowManager是操作Window的入口。...---- 不好意思时间不太够了,,具体的分析明天继续Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(2)
) :为Activity创建新的任务栈,activity(需要创建任务栈的Activity),intent(用于跳转页面的Intent),description(描述信息),thumbnail(缩略图)...到栈顶. * * @param activity 添加的activity */ public void pushActivity(Activity activity) { if (mActivityStack...,遍历是从栈底开始查找,为了确定栈中有这个activity,并获得一个引用 * 删除是从栈顶查找,结束查找到的第一个 * 在activity外结束activity时调用 * * @param klass...extends BaseActivity> klass) { for (Activity activity : mActivityStack) { if (activity !.../移除所有的Activity public void removeAll(){ for (Activity activity : mActivityStack) { if (activity !
文章目录 一、activity的生命周期 1、activity的四种状态 2、activity的生命周期 3、activity的进程优先级 二、android的任务栈 三、activity的启动模式 四...、scheme跳转协议 一、activity的生命周期 1、activity的四种状态 running:可以交互 paused:可以看见但不可以交互,成员变量都还在,但是若内存紧张,将会优先被系统回收...stopped:完全被其他的activity覆盖看不见,成员变量都还在,但是若内存紧张,将会优先被系统回收 killed:被系统回收了,所保留的信息和成员变量已经不存在了 2、activity的生命周期...重新启动才调,由不可见状态变为可见状态的时候会调用 onDestory(): 做一些资源释放 3、activity的进程优先级 前台:可交互的activity 或者 在前台activity绑定的service...):创建的activity是在栈内的话,就会复用并将栈内其上的activity移除,并回调一个newIntent(); 4、singleInstence:在整个系统在只有这一个activity,并且独享任务栈
最近在做菜单,有三个界面分别用activity来显示,如 Activity A -> Activity B -> Activity C,返回键Activity C -> Activity B...-> Activity A,当从A进入到B时按返回键无法退到A,是因为在A进入B时用了finish()方法,把A给销毁了,如下: finish(); Intent aToB = new Intent
Activity 什么是Activity 创建Activity 启动Activity 保存Activity状态 Activity的生命周期 ---- acitivyt 是什么 引用官方的说法: 是一个应用组件...窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上 创建Activity 要创建Activity 必须继承自Activity或者Activity的子类。...Activity调用的第一个方法 , 创建完成后必须在Manifest文件中 声明此Activity 系统才会知道有这个Activity <application ....的状态 当用户 离开Activity去往另一个Activity时;Activity会被压入返回栈,如果内存不够就会被销毁 ,当Activity被销毁后其中的数据当然就没了,如果需要保留这些数据可调用 方法...当前activity1跳往到activity2 ,activity就会把activity1覆盖,这时就调用了此方法 onRestart(); 重新启动 onDestroy():activity再结束前调用的最后一个方法
Activity栈 2.3 SecondActivity中启动MainActivity 2.3.1 生命周期 2.3.2 Activity栈 2.4 MainActivity中启动SecondActivity...2.4.1 生命周期 2.4.2 Activity栈 3....Demo中包含两个Activity,Activity的LaunchMode: MainActivity-Standard SecondActivity- SingleTask 步骤: 启动MainActivity...activities“,dump Activity栈的信息。...Activity实例上面的Activit全部结束掉,最终这个Activity实例会位于任务的堆栈顶端。
上一期我们学习了Activity的创建和配置,当时留了一个悬念,如何才能在默认启动的Activity中打开其他新建的Activity呢?那么本期一起来学习如何启动和关闭Activity。...一、概述 经过前面内容的学习,知道一个Android应用通常都会包含多个Activity,但只有一个Activity 会作为程序的入口——当该Android应用运行时将会自动启动并执行该Activity...至于应用中的其他Activity,通常都由入口 Activity启动,或由入口 Activity启动的Activity启动。 Activity启动其他Activity有如下两个方法。...该Module一共包含了2个Activity,并在AndroidManifest清单文件中配置两个Activity。...其中第一个Activity的界面布局非常简单,只包含一个按钮和文本提示,其中按钮的作用主要是启动第二个Activity。
Minimum Window Substring Given a string S and a string T, find the minimum window in S which will contain...Example: Input: S = "ADOBECODEBANC", T = "ABC" Output: "BANC" Note: If there is no such window in...If there is such window, you are guaranteed that there will always be only one unique minimum window...思路: 这是一道经典的sliding window的题目,题目意思是给定两个字符串,字符串S如果包含另一个字符串T的所有字符,那么就返回这个包含T所有字符的最小字符串。
以Activity A 启动 Activity B,Activity B所在进程未启动为例 大体经过已经几个阶段: startActivity.png 第一步 Activity A 调用AMS 启动接口...这是一个binder通讯,正常启动Activity的方式,一般我们都会通过以下的方式启动一个新的Activity startActivity(new Intent(A_Activity.this,B_Activity.class..., app, } stack为mFocusStack, 这一部为取出栈顶的Activity,即我们要启动的activity,虽然之前activity没启动,但ams里面栈的信息在启动进程前都已经准备好了...r.activity.mFinished && !...Activity onStart函数 activity.performStart(); } 大体流程可以用下图表示 activity启动.png 参考: 网络课程 --剖析Framework
领取专属 10元无门槛券
手把手带您无忧上云