从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等。下面就以这几个类为出发点来概览下安卓开发的“界面架构”。...再进一步,以ViewTree为整体,再看它和window,系统服务之间的关系可以从整体上把握android中界面框架。...应用层要做的就是准备好Button对象,然后设置好相关布局参数,而Window对象的创建本身最终是通过系统服务完成的。类似Activity那样,Window对象的创建不是new出来的。...窗口类型 前面说过,安卓中的界面划分为一个个窗口,系统运行中各个不同的窗口可以叠加显示。和叠加相关的属性就是Z-ordered,它是正整数。...WindowManagerService 就像Activity的创建一样,Window的创建不是像View那样new出来的。而是通过IPC调用系统服务WindowManagerService完成的。
作者 大家好,我叫小鑫,也可以叫我蜡笔小鑫; 本人17年毕业于中山大学,于2018年7月加入37手游安卓团队,曾经就职于久邦数码担任安卓开发工程师; 目前是37手游安卓团队的海外负责人,负责相关业务开发...本文将介绍几种实现方案,以及我们踩过的坑 1、方案一:应用外悬浮窗+栈顶权限/生命周期回调 通常实现悬浮窗,首先考虑到的会是要使用悬浮窗权限,用WindowManager在设备界面上addView实现(...= new LayoutParams(mWidth, mHeight); params.setMargins(mLeft, mTop, 0, 0); setLayoutParams(params); 通过更新...SqAddFloatView(this, R.mipmap.ic_launcher).show(this) 3、方案三:WindowManager+应用内层级实现 WindowManger中的层级有如下两个...使用WindowManager的updateViewLayout方法 mWindowManager.updateViewLayout(DragViewLayout.this, floatLayoutParams
最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结。本文将从以下两点对屏幕锁屏进行解析: 1....如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也有两种方法: a)...Boolean) mReflectScreenState.invoke(pm); } catch (Exception e) { e.printStackTrace() } 2) 接收广播 当安卓系统锁屏或者屏幕亮起...竟然知道了对于系统屏幕监听的方法,那么接下来就是要在屏幕锁屏的时候,弹出悬浮框了,这个的实现方式有两种: 1) 使用WindowManager 2) 使用Activity 目前情况是,使用这两种方式在真机上都可以实现...,如果网友们发现有问题,可以在博客中留言 1) 使用WindowManager 代码如下: private void init(Context mContext) { this.mContext
安卓环境变量配置 系统变量 变量名:ANDROID_HOME 变量值:D:\Android\android-sdk-windows Path中增加:%ANDROID_HOME%\platform-tools...); playIntent.setDataAndType(uri, "video/mp4"); startActivity(playIntent); ----------调用安卓编写的播放器...RelativeLayout.LayoutParams( -1, -1); this.weidianyingLayout.setGravity(17); this.weidianyingLayout.addView...setUseWideViewPort(true); wv.getSettings().setLoadWithOverviewMode(true); ------------------android向服务器发送...(如:google player、豌豆荚、360手机助手等),让您选择。
.Linux kernel 加载硬件驱动 如硬件驱动/显示驱动/输入驱动/媒体驱动 硬件抽象层解决并适配不同驱动标准,为上层应用提供统一的api 3.C++ framework 创建linux中的第一个用户进程...是由C++代码通过类加载机制加载的,最终调用到了ZygoteInit.java的实例方法 ZygoteInit.java中main方法会启动SystemServer系统服务进程 SystemServer...5.Apps 所有的系统服务都创建成功之后,会执行Launcher启动流程 2....个 AMS 四大组建调度服务(安卓10之后Activity调度交给ATMS) Activity Task Manager Service 安卓10之后Activity调度服务 PKMS 安装,卸载,扫描管理等...Application对象,调用onCreate函数 通过AMS(ATMS)再次启动Activity,进程创建时未启动的那个Activity会恢复继续创建 在ActivityThread中以反射形式创建
2.正文 天才少年_来到一家公司等待面试中。。。 一个眼睛又大又亮的小姐姐,萌萌的站在我去 的面前。...,makeVisible调用了WindowManager的addView方法,WindowManager是个接口,他的具体实现类是WindowManagerImp,直接看WindowManagerImp...ViewRootImpl对象,后面View的刷新正是通过ViewRootImpl实现的,由于你面试官没有问,这边不展开讨论,不然把我留到天黑,面试官可能有危险,嘿嘿。...赠送一个知识点:真正把mDecor加到WindowManager上是并显示出来在makeVisible()方法中实现的,Activity的Window才能正在被使用。...2)安卓系统中,操作viwe对象没有加锁,所以如果在子线程中更新UI,会出现多线程并发的问题,导致页面展示异常。 小伙子分析得很不错,把我打动了,回去等offer吧。
完成) Window是一个抽象类,唯一实现类是PhoneWindow 创建Window需要通过WindowManager创建,WindowManager是外界访问Window的入口 Window具体实现位于...建立联系 Window并不是实际存在的,而是以View的形式存在 WindowManager的三个接口方法也是针对View的 实际使用中无法直接访问Window,必须通过WindowManager View...系统窗口,不需要对应任何Activity,如:状态栏,导航栏,普通应用程序不能创建系统窗口,必须要有系统应用权限.(层级2000~2999)。...11、Token的使用场景? Activity创建时,AMS中需要根据Token去找到对应的ActivityRecord。...中并显示——在Dialog的show方法中,通过WindowManager将DecorView添加到Window中(mWindowManager.addView(mDecor, 1)) Dialog关闭时会通过
childView = parent.getChildAt(i); if (childView instanceof ViewGroup) { //调用此方法系统会默认设置...paddingTop高度的view用于沉浸式状态栏 childView.setFitsSystemWindows(true); //不影响滑动效果(如ListView...View,在代码中动态改变高度,把它变成statusBar高度,不需要设置FitsSystemWindows,这种方法侵入性更高,不推荐使用 方法1中的完整方法如下: private static...fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha)); } else { decorView.addView... 另外,如果我们想要修改状态栏的字体颜色和图标颜色,需要安卓
安卓逆向系列教程 4.2 分析锁机软件 作者:飞龙 这个教程中我们要分析一个锁机软件。像这种软件都比较简单,完全可以顺着入口看下去,但我这里还是用关键点来定位。...我们往下看看便可知道,这个软件启动之后就创建了一个服务,服务中获取了WindowsManager,然后加载了一个LinearLayout并添加它,来实现锁屏的效果: private void createFloatView...(); this.mWindowManager = ((WindowManager)localApplication.getSystemService(Context.WINDOW_SERVICE...LayoutInflater.from(getApplication()).inflate(2130903041, (ViewGroup)null)); this.mWindowManager.addView...参考 软件来源:21、安卓逆向 - 分析锁机软件
创建Window,通过WindowManager即可完成。WindowManager是操作Window的入口,Window的具体实现是在WindowManagerService中。...应用window对应activity;子window要依附在父window上,如dialog;系统window需要申明权限才能创建,比如toast、系统状态栏。...view,实际使用的就是这三个方法,上面创建window的例子用的就是addView方法。...一个window就对应一个view,window操作view实际是通过ViewRootImpl实现。使用中是通过WindowManager对的操作,无法直接访问window。...; restoreSoftInputMode = true; } //使用WindowManager.addView mWindowManager.addView
一、屏幕显示 1、像素 安卓支持的像素单位: px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小); 安卓常用的三种像素单位...: px:手机屏幕上可显示的最小单位; dp:按照屏幕尺寸计量,与物理设备无关; sp:原理跟dp差不多,专用于设置字体大小; 2、颜色 概述: 安卓中的颜色由透明度alpha和RGB(红、绿、蓝)组成...(透明度为FF),在代码中默认为全透明(透明度为00); RGB三色: 数值越小颜色浓度越小越暗,数值越大颜色浓度越大越亮,亮到极致是白色,暗到极致是黑色; 在Android中使用颜色的3种方式: ①使用系统已经定义好的颜色常量...colors.xml中定义的颜色; xml中示例: android:textColor="@color/colorPrimary" 代码中示例: tv1.setTextColor(getResources...,已经是最后一次,其内不能再包含其他子控件或者子视图; ViewGroup视图组: 所有布局视图类都是从ViewGroup派生而来的; ViewGroup的三个方法(也是所有布局类视图共有的方法): addView
系统Window:z-index在2000~2999之间,它往往需要声明权限才能创建,例如Toast、状态栏、系统音量条、错误提示框都是系统Window。...第三种:采用服务Service,然后在Service中采用WindowManager添加和移除View操作。那么在Activity中想要展示弹窗则需要通过广播通信,让Service收到广播处理逻辑。...当APP通过WindowManagerService的代理向其添加窗口的时候,WindowManagerService除了自己进行登记整理,还需要向SurfaceFlinger服务申请一块Surface...3.3 应用悬浮窗应用内悬浮窗实现流程1.获取WindowManager;2.创建悬浮View;3.设置悬浮View的拖拽事件;4.添加View到WindowManager中对于应用悬浮窗来说,Android...中申请权限,为了防止用户手动在设置中取消权限,需要在每次使用时check一下是否有悬浮窗权限存在;Settings.canDrawOverlays(this)当API > 25时,系统直接禁止用户使用TYPE_TOAST
Window的具体实现在WindowManagerService中,但是创建Window或者访问Window的操作都需要WindowManager。...不能单独存在,需要附属在特定的父Window之中(如Dialog就是子Window),Window层级为1000~1999。 系统Window。...拥有token的context可以创建界面、进行UI操作,而没有token的context如service、Application,是不允许添加view到屏幕上的。...//获取了WindowManager对象,mContext一般是个Activity,获取系统服务一般是通过Binder获取 mWindowManager = (WindowManager...然后获取Dialog自己的DecorView对象,并通过addView方法添加到WindowManager对象中,Dialog出现到屏幕上。
窗口的Z次序管理:窗口的分配序号、次序调整等 WMS中窗口次序分配如何影响SurfaceFlinger服务 在WMS窗口添加一文中分析过,窗口的添加是通过WindowManagerGlobal.addView...中,并且为Activity创建APPWindowToken。...将来Activity通过getSystemService获取WindowManager服务的时候,其实是直接返回了Window的WindowManagerImpl, @Override public Object...到这一步,Activity已经准备完毕,剩下的就是在resume中通过addView将窗口添加到到WMS,具体实现在ActivityThread的handleResumeActivity函数中: final...,换句话说,必须使用Activity内部的WindowManagerImpl进行addView才可以。
App在没有悬浮窗权限下,不能添加系统级窗口,但却可以显示Toast。这说明Toast不在悬浮窗权限控制下,系统中某些机制保证了Toast的显示。...Toast.makeText方法创建的Toast中,nNextView是一个包含TextView的LinearLayout。...(windowManager); } return super.getSystemService(name); } } 3、使用FakeContext创建一个View,并以该View发起一个Toast...适配情况 1、由于Toast机制依赖于NMS,部分机型需要开启通知栏权限才能使用Toast; 2、部分机型在App界面外无法使用Toast,如:OPPO; 3、部分机型在App界面外Toast流程正常执行...,但Toast窗口不会显示,如:Vivo; 4、之前也有直接使用TYPE_TOAST进行addView()添加窗口的做法,但Android8.0之后TYPE_TOAS窗口需要NMS发放的一个token,
而 Window 类把一些交互从 View/ViewGroup 中抽离出来,定义了一些窗口的行为,例如菜单,以及处理系统按钮, 如“Home”,“Back”等等。...但是,Framework 还是定义了一些,可以被应用所创建的系统窗口,如 TYPE_TOAST,TYPE _INPUT_ METHOD,TYPE _WALLPAPTER 等等。 ?...但是,分析 FrameWork 所提供的一些窗口的显示,如 Dialog 等,并没有看到在调用 addView 之前,对 token 赋值呢。...3.2 子窗口的创建 对于 WmS 来讲,无论什么样的窗口创建,最终都是通过 WindowManagerImpl 的 addView,来添加一个 View。...添加一个窗口,就是通过 WindowManager 的 addView 方法。同样的,移除一个窗口,就是通过 removeView 方法。
在measure完成后,可以通过getMeasuredWidth/Height()方法,就能获得View的测量宽高 在一定极端情况下,系统需要多次measure,因此得到的值可能不准确,最好的办法是在onLayout...方法中获得测量宽/高或者最终宽/高 6、如何在Activity启动时获得View的宽/高?...) WindowManager.addView(decor, 1) WindowManager.addView(decor, 1)本质是调用WindowManagerGlobal的addView方法。...onDraw中避免冗余代码、避免创建对象 onDraw中禁止new对象。如:不应该在ondraw中创建Paint对象。Paint类提供了reset方法。可以在初始化View时创建对象。...减少冗余代码 不要使用Handler,因为已经有post系列方法,View已经有post系列方法,没有必要重复去写,可以直接使用,最终会投递到主线程的Handler中 使用的线程和动画,要在onDetachedFromWindow
(1)Window是抽象类,具体实现是PhoneWindow,通过WindowManager就可以创建Window。...在实际使用中无法直接访问Window,只能通过WindowManager才能访问Window。...1.Toast属于系统Window,它内部的视图由两种方式指定:一种是系统默认的演示;另一种是通过setView方法来指定一个自定义的View。...3.对于非系统应用来说,mToastQueue最多能同时存在50个ToastRecord,这样做是为了防止DOS(Denial of Service,拒绝服务)。...其他学习资料 1.Android应用开发之(WindowManager类使用) OK,本章结束,谢谢阅读。
1.WindowManager介绍 一种系统服务,主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等 2.WindowManager功能 WindowManager...提供的功能很简单,就三个,这三个方法定义在ViewManager中。...实际使用中无法直接访问window,对window的访问必须通过WindowManager。...为了分析window内部机制,这里从window的添加删除更新说起 (1)添加addView window的添加是通过addView实现的,但是WindowManager是个接口,真正是由WindowManagerImpl...)context.getSystemService(Context.WINDOW_SERVICE); // 通过makeNewWindow创建一个Window,下面的setWindowManager
image.png 目录 Android之WindowManager介绍 WindowManager android中真正展示给用户的是window和view. activity在android中所其的作用主要是处理一些逻辑问题...); Window android的窗口分为三种: 1、应用程序窗口 (Application Window): 包括所有应用程序自己创建的窗口,以及在应用起来之前系统负责显示的窗口。...PhoneWindow对象被创建是在Activity中: final void attach(Context context, ActivityThread aThread,...View才是Window存在的实体,在实际使用中无法直接访问Window,对Window的访问必须通过WindowManager。...image.png Window的添加过程需要通过WindowManager的addView来实现,WindowManager是一个接口,它的真正实现是WindowManagerImpl类。