展开

关键词

View,Activity&Window

面试中有时候会被问到View,ActivityWindow,那么这三者之间究竟有什么关系呢? // AppCompatDelegate.java public static AppCompatDelegate create(Activity activity, AppCompatCallback // Activity.java public Window getWindow() { return mWindow; } final void attach(Context context 的 attach方法中初始化的,被 Activity持有,根据这些我们可以绘制一个 Activity的基础结构,如下图: ? 完成 Activity和 View之间的解偶。

12510

ActivityWindow 创建过程

ActivityWindow 创建过程 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关联,ActivityWindow关联 总结 Activity包含一个PhoneWindow,而PhoneWindow继承WindowActivity通过setContentView

29430
  • 广告
    关闭

    【玩转 Cloud Studio】有奖调研征文,千元豪礼等你拿!

    想听听你玩转的独门秘籍,更有机械键盘、鹅厂公仔、CODING 定制公仔等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Window源码分析之Activity

    2 剖析内部 第一步 在Activity#attach中,可以看出创建了一个PhoneWindow对象,并且通过context.getSystemService(Context.WINDOW_SERVICE )设置了WindowManager对象,还通过Window#getWindowManager对Activity的mWindowManager赋值,这样Activity就与Window#WindowManager parentWindow) { // 将传递的 window对象保存, 对于activity来说,会将PhoneWindow对应的对象传入, 而对于 Context.getSystemService 时我们看见的窗口,接下来看在ActivityWindow是怎么显示出来,看Activity.makeVisiable: void makeVisible() { if (! 到此ActivityWindow,就完成了创建,显示。 小贴士 本文版权归Open软件开发小组所有,如需转载请联系主编申请授权。

    35540

    Activity中的Window的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上进行展现。

    34220

    理清 Activity、View 及 Window 之间关系

    我们看到显示的每个Window(包括对话框、全屏的Activity、状态栏等)都有他自己绘制的Surface。 同样,我们还是以是否存在这个问题为切入点,去理清ActivityWindow关系。 前面我们知道,Window已经是系统管理的窗口界面。那么为什么还需要Activity呢? 我们把Activity所做的事情,全部封装到Window不就好了? 其实,本质上讲,我们要显示一个窗口出来,的确可以不需要Activity。悬浮窗口中不就是没有使用Activity来显示一个悬浮窗吗? 既然如此,Window(以及View)能处理点击事件以及封装各种逻辑,那为啥还需要Activity呢? 为了让大家能简单、快速的开发应用,Android通过定义Activity,让Activity帮我们管理好,我们只需简单的去重写几个回调函数,无需直接与Window对象接触。

    62490

    剖析ActivityWindow、ViewRootImpl和View之间的关系

    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绘制画面

    91280

    Android高频面试专题 - 提升篇(一)Window、View、Activity

    本篇主要介绍Window相关面试要点,常见Window属性,WindowActivity、View之间的关系。更多其他完整面试专题,请关注公众号获取. 1、Window是什么? 表示一个窗口的概念,是所有View的直接管理者,任何视图都通过Window呈现(点击事件由Window->DecorView->View; Activity的setContentView底层通过Window 7.ActivityWindow、DecorView、View之间的关系 每个Activity 包含了一个Window 对象,这个对象是由PhoneWindow做的实现。 即使Activity的布局已经成功添加到DecorView中,DecorView此时还没有添加到Window中 ActivityThread的handleResumeActivity方法中,首先会调用Activity 中——和Activity一致(setContentView) 将DecorView添加到Window中并显示——在Dialog的show方法中,通过WindowManager将DecorView添加到Window

    1.5K20

    从源码的角度浅谈ActivityWindow、View之间的关系

    序言 很多人都会用ActivityWindow、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 =

    32820

    Activity、View、Window的理解一篇文章就够了

    文章有点长,首先要理解Activity、View、Window,我提出了一些问题,这篇文章可以解答如下问题: 1、为什么要设计Activity、View、Window? 2、Activity工作过程是什么样的?(理解Activity) 3、Window是什么?它的职能是什么? 4、View跟Window有什么联系? 5、Activity、View、Window三者如何关联? 为什么要设计Activity、View、Window? 每一个Activity都包含了唯一一个PhoneWindow,这个就是ActivityWindow(之所以是说根Window是因为在它上面可以增加更多其他的Window,例如:弹出框(dialog)) 4、View跟Window有什么联系? View需要通过Window来展示在Activity上。 5、Activity、View、Window三者如何关联?

    36310

    从源码角度分析ActivityWindow及View之间的关系

    我们都知道布局文件的加载是在Activity的onCreate()方法中,使用setContentView进行加载 这个方法是个重载方法 ? 直接创建了一个PhoneWindow对象, 那么意味着 每创建一个Activity都会创建一个PhoneWindow对象 那么PhoneWindow与Window到底是什么关系呢? ? PhoneWindow是Window的子类 那么到此为止, 我们知道了其实Activity中的setContentView实际上是PhoneWindow在处理 我们找到PhoneWindow.java能发现其对应的方法 咱们平常开发时在xml中写的布局并不是根结点, 而是contentParent的子view 总结 它们之间的关系可以大致理解为: Activity: 相当于一栋房子 Window: 相当于房子里的一扇窗户 View: 相当于窗户上的一朵窗花 它们三个的创建顺序为: Activity--->Window--->View 具体时序图如下: ?

    16950

    Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储

    01 理解Activity View window的关系 Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸 Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。 比如TextView,Button等 这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。

    19840

    Android开发之漫漫长途 Ⅲ——Activity的显示之Window和View(2)

    ); } } 不是要分析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) * 逻辑这么简单吗?

    26730

    Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(1)

    好吧,让我稍微撩起一点Activity神秘的面纱。 ---- 在此之前我们要先猜想一波,Activity是以什么形式显示的呢? 我们知道Windows有Window(窗口)这个概念,其实在Android中也有这个概念,与Windows的窗口有着类似的含义。 Android中的所有视图,不管是Activity,Dialog,还是Toast都是附加在Window上展示的。介绍了Window,开始介绍如何操作Window(Window是个抽象类)。 WindowManager是操作Window的入口。 ---- 不好意思时间不太够了,,具体的分析明天继续Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(2)

    19520

    activity跳转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

    8130

    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,并且独享任务栈

    10130

    Activity

    Activity 什么是Activity 创建Activity 启动Activity 保存Activity状态 Activity的生命周期 ---- acitivyt 是什么 引用官方的说法: 是一个应用组件 窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上 创建Activity 要创建Activity 必须继承自Activity或者Activity的子类。 Activity调用的第一个方法 , 创建完成后必须在Manifest文件中 声明此Activity 系统才会知道有这个Activity <manifest ... > <application . 的状态 当用户 离开Activity去往另一个Activity时;Activity会被压入返回栈,如果内存不够就会被销毁 ,当Activity被销毁后其中的数据当然就没了,如果需要保留这些数据可调用 方法 当前activity1跳往到activity2 ,activity就会把activity1覆盖,这时就调用了此方法 onRestart(); 重新启动 onDestroy():activity再结束前调用的最后一个方法

    25560

    ActivityActivity的启动模式:SingleTask

    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中包含两个ActivityActivity的LaunchMode: MainActivity-Standard SecondActivity- SingleTask 步骤: 启动MainActivity activities“,dump Activity栈的信息。 Activity实例上面的Activit全部结束掉,最终这个Activity实例会位于任务的堆栈顶端。

    5620

    Sliding Window - 76. Minimum Window Substring

    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所有字符的最小字符串。

    20310

    Flink window

    经过windowAll的算子是不分组的窗口(Non-Keyed Window),它们的原理和操作与Keyed Window类似,唯一的区别在于所有数据将发送给下游的单个实例,或者说下游算子的并行度为1。 // Keyed Window stream .keyBy(...) <- 按照一个Key进行分组 .window(...) Window Assigners Window assigner 定义了 stream 中的元素如何被分发到各个窗口 Flink 为最常用的情况提供了一些定义好的 window assigner 所有内置的 window assigner(除了 global window)都是基于时间分发数据的,processing time 或 event time 均可 基于时间的窗口用 start input .keyBy(<key selector>) .window(<window assigner>) .allowedLateness(<time>) .

    9020

    Activity中启动和关闭其他Activity

    上一期我们学习了Activity的创建和配置,当时留了一个悬念,如何才能在默认启动的Activity中打开其他新建的Activity呢?那么本期一起来学习如何启动和关闭Activity。 一、概述 经过前面内容的学习,知道一个Android应用通常都会包含多个Activity,但只有一个Activity 会作为程序的入口——当该Android应用运行时将会自动启动并执行该Activity 至于应用中的其他Activity,通常都由入口 Activity启动,或由入口 Activity启动的Activity启动。 Activity启动其他Activity有如下两个方法。 该Module一共包含了2个Activity,并在AndroidManifest清单文件中配置两个Activity。 其中第一个Activity的界面布局非常简单,只包含一个按钮和文本提示,其中按钮的作用主要是启动第二个Activity

    2.2K50

    相关产品

    • 腾讯智慧建筑管理平台

      腾讯智慧建筑管理平台

      腾讯智慧建筑管理平台(微瓴)是深度适配智慧建筑场景的物联网类操作系统,针对于建筑内的硬件、应用等资源,提供物联、管理与数字服务,赋予建筑综合协同的智慧能力,并为建筑管理运营者与建筑业主方提供安全、高效、便利的建筑综合管理运营系统……

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券