android窗口管理

来源:互联网 发布:美国网络电视台 nefix 编辑:程序博客网 时间:2024/05/17 08:24
 mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);        Window w = PolicyManager.makeNewWindow(mContext);        mWindow = w;

Dialog 中的一点源码 

  @Override    public void onActivityCreated(Bundle arg0) {        super.onActivityCreated(arg0);        getDialog().getWindow()                .getAttributes().windowAnimations = R.style.DialogAnimation;    }

window w= PolicyManager.makeNewWindow(this)实例化一个phoneWindow对象,

phoneWindow是window 的衍生对象

但是这个对象还是比较抽象的东西。在activity开始oncreate调用时,

会调用setContentView方法。会去获得之前那个phoneWIndow对象对应的DecorView,

最后通过层层窗口修饰(状态栏等)后调用activity的makeVisible方法,

在方法中通过addiew方法完成窗口的添加。



窗口管理是android的一个核心内容。它管理着窗口的创建和销毁,布局和大小,焦点的控制等等。窗口可以分为两类:

一种是应用窗口,即由具体应用创建的窗口,其实其中还可以细分出父窗口和子窗口。窗口一般都会对应一个activity。

一种是系统窗口,如状态栏,这类窗口由系统直接通过windowManager来创建,和activity无关。

在这里,窗口的概念其实可以说由三部分构成,一部分是用来描述窗口信息的,由WindowState对象表示。

一个WindowState对象对应一个窗口,它拥有绘制窗口所需要的信息。但是真正去绘制窗口需要另一部分内容Surface来完成,

最终会通过surfaceflinger完成绘图。还有一部分就是对消息的处理,windowmanagerService把窗口信息传递给InputManager,

这样InputDispatcher就能根据当前窗口的状态进行消息处理。

WindowManager和其他很多android的服务一样,采用C/S的架构。其中windowManagerService跑在System_server进程,作为服务端,客户端通过ipc调用和它进行交互。


 



0 0
原创粉丝点击