Android 开发艺术探索笔记(16)

本文探讨了Android开发中的WindowManager使用,包括如何添加Window,理解Window与View的关系,以及动画的处理。强调了在Activity退出时停止无限循环动画的重要性,解释了硬件加速在保证动画流畅性中的作用。同时,文章详细介绍了WindowManager的flags和type参数,以及Window的层级管理。此外,还讨论了Window内部机制,如通过ViewRootImpl连接Window和View。最后,作者分享了关于Android学习和面试的个人经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些动画会无限循环,所以要在Activity退出时及时停止。

  • 兼容性问题

  • View动画问题

View动画是对动画做影像动画,并没真正改变View的状态

  • 不要使用px

  • 动画元素的交互

属性动画的单击事件触发在移动后的位置,View则在之前的位置。

  • 硬件加速

使用动画的过程中尽量使用硬件加速,能保证动画的平滑和流畅性。

理解Window和WindowManager


Window是一个窗口,Window的具体实现位于WindowManagerService中,WindowManager可以管理Window,并以IPC的形式与WindowManagerService交互。

首先使用WindowManager来添加一个Window,代码如下:

这里写图片描述

这里写图片描述

上述的代码将一个Button添加屏幕的(100,300)坐标上。

WindowManager.LayoutParams中的flags和type这两个参数比较重要。

下面是几个重要的flags:

这里写图片描述

Type参数表示的是Window的类型,有三种,分别是应用Window,子Window和系统Window。

应用类Window对应着一个Activity,子Window不能单独存在,它需要附属在父Window中,比如常见的Dialog就是子Window。系统Window就是需要声明权限才能创建的Window,比如Toast。

它们都有分层,大的级别在上面,Window的范围是1-99,子Window是1000-1999,系统则是2000-2999,可以通过LayoutParams的的type设置。

WindowManager的功能比较简单,就是添加View、更新View、删除View。这三个方法都定义在接口ViewManager中。而WindowManager继承了ViewManager。

Window的内部机制

每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系 Android开源项目《ali1024.coding.net/public/P7/Android/git》 ,因此View实际上是不存在的,它是以View的形式存在。实际中无法直接应用Window,要通过WindowManager。

  • Window的添加

通过WindowManager的addView来实现。WindowManager是一个接口,它真正实现的是WindowManagerImpl类。在这个类中Window的三大操作如下:

这里写图片描述

可以看到所有的操作都是交给了WindowManagerGlobal来处理。这是典型的桥接模式。WindowManagerGloabl的addView的源码为:

这里写图片描述

这里写图片描述

![这里写图片描述](https://img-blog.youkuaiyun.com/20180723173243934?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Jpa2thdGhld29ybGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源 /70)
上面是创建每个Window所对应的View、每个Window所对应的ViewRootImpl,所有的参数,然后将View添加到这些列表中。
然后通过ViewRootImpl来更新界面并完成Window的添加过程。
这个步骤由setView来完成,其内部有requestLayout,用来进行异步刷新。

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。
如此。相信自己,没有做不到的,只有想不到的。

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值