- 浏览: 23746 次
- 性别:
- 来自: 北京
最新评论
文章列表
page6
WindowManagerGlobal的getWindowSession函数的定义如下:
1 public static IWindowSession getWindowSession(Looper mainLooper) {
2 synchronized (WindowManagerGlobal.class) {
3 if (sWindowSession == null) {
4 try {
5 InputMethodManager imm = Inp ...
page11
WindowManagerService的getDisplayContentLocked函数的定义如下:
1 public DisplayContent getDisplayContentLocked(final int displayId) {
2 DisplayContent displayContent = mDisplayContents.get(displayId);
3 if (displayContent == null) {
4 final Display dis ...
page1
Activity组件在其窗口对象和视图对象创建完成之后, 就会请求与WindowManagerService建立一个连接, 即请求WindowManagerService为其增加一个WindowState对象, 用来描述它的窗口状态.
我们从两方面来看Activity组件与WindowManagerService ...
page4
我们看一下ViewRootImpl对象的创建过程, ViewRootImpl类的声明如下:
public final class ViewRootImpl implements ViewParent,
View.AttachInfo.Callbacks, HardwareRenderer.HardwareDrawCallbacks
ViewRootImpl类的构造函数定义如下:
1 public ViewRootImpl(Context context, Display display) {
2 ...
page1
当一个Activity第一次激活的时候会为该Activity组件创建一个ViewRoot对象, 并且与该Activity所创建的应用程序窗口关联起来, 这样就可以通过该ViewRoot对象来控制应用程序窗口视图的UI展示了.
我们从ActivityThread的handleResumeActivity函数开始分析ViewRoot的创建过程, handleResumeActivity函数定义如下, 我们只关心ViewRoot创建的部门:
1 final void handleResumeActivity(IBinder token, boolean clearHide, ...
page7
在这篇文章里, 我们分析一下W类的构造过程. W类是定义在ViewRootImpl类中的一个内部类, W类的定义如下:
static class W extends IWindow.Stub
由此可见, W本质上是一个Binder本地对象, 其实这是会传给WindowManagerService的, WindowManagerService就是通过W来通知Activity对象执行一些操作.
W的构造函数如下:
W(ViewRootImpl viewAncestor) {
mViewAncestor = new WeakRefere ...
page9
在这里我们分析一下DisplayManager的getDisplay函数的实现:
1 public Display getDisplay(int displayId) {
2 synchronized (mLock) {
3 return getOrCreateDisplayLocked(displayId, false /*assumeValid*/);
4 }
5 }
第2行(DisplayManager->getDispla ...
page5
在这篇文章中, 我们分析一下ContextImpl的getSystemService函数,
1 public Object getSystemService(String name) {
2 ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);
3 return fetcher == null ? null : fetcher.getService(this);
4 }
第2行(ContextImpl->getSystemService)SYSTEM_SERVIC ...
page1
我们开始分析一下Activity的Window和WindowManager的创建过程, 在Activity的attach函数中, 不仅会创建Context, 还会创建Window和WindowsManager对象.因此我们就从Activity的attach函数开始分析:
1 final void attach(Context context, ActivityThread aThread,
2 Instrumentation instr, IBinder token, int ident,
3 Application a ...
page1
从本篇文章开始,我们分析一下Activity创建Context的过程.
Context是在ActivityThread的performLaunchActivity函数中创建的, 因此我们就从performLaunchActivity函数作为入口开始分析:
1 private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
2 // System.out.println("##### [" + System.currentTim ...
page4
在这里我们分析一下ContextImpl的init函数的具体实现:
final void init(LoadedApk packageInfo, IBinder activityToken, ActivityThread mainThread) {
init(packageInfo, activityToken, mainThread, null, null, Process.myUserHandle());
}
1 final void init(LoadedApk packageInfo, IBinder activityToken, ...
我们从SurfaceComposerClient对象的创建开始分析应用程序与SurfaceFlinger的连接过程.每一个需要SurfaceFlinger渲染的应用程序都会创建一个SurfaceComposerClient对象,是这样么,我不确定,需要验证.
SurfaceComposerClient类的声明(在SurfaceComposerClient.h文件中)如下:
class SurfaceComposerClient : public RefBase
SurfaceComposerClient类的构造函数定义如下:
SurfaceComposerClient::SurfaceCo ...
page11
我们来看一下SurfaceFlinger的onFirstRef函数的定义:
1void EventThread::onFirstRef() {
2 run("EventThread", PRIORITY_URGENT_DISPLAY + PRIORITY_MORE_FAVORABLE);
3}
我靠, 又调用run函数, 这会导致又启动了一个线程.
同样的, 这也会导致readyToRun和threadLoop函数的.
EventThread的readyToRun函数是从Thread类继承而来的, 是 ...
page6
我们看一下Thread的run函数的实现:
1 status_t Thread::run(const char* name, int32_t priority, size_t stack)
2 {
3 Mutex::Autolock _l(mLock);
4
5 if (mRunning) {
6 // thread already started
7 return INVALID_OPERATION;
8 }
9
10 // reset ...
page1
在Android系统中, 显示系统在底层是通过SurfaceFlinger服务来完成的, 因此从今天开始, 我们从SurfaceFlinger服务作为入口来分析一下Android显示系统.
SurfaceFlinger服务是在System进程中, 而System进程是由Zygote进程启动的, 并且是以Java层的SystemServer类的静态成员函数main为入口函数的。
因此,接下来我们就从SystemServer类(定义在SystemServer.java文件中)的静态成员函数main开始,分析SurfaceFlinger服务的启动过程:
1 public stati ...