小米01月第一周工作记录 工作记录
小米01月第一周工作记录
01.04

左图,Surface就像是UI的画布,而App则像是在Surface上作画,无论其用哪种技术。
右图,Surface向SurfaceFlinger提供数据,而SurfaceFlinger则混合数据。

在 ActivityThread.java 的 performLauchActivity(ActivityRecord r,Intent customIntent) 方法中 Instrumentation 通过反射机制创建 Activity,关键代码为
activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent);
在方法 newActivity中,new 出 Activity 后调用方法 activity.attach(...) (Activity.java) 将 Activity 与 Window 进行关联。
window 是在 activity.attach(...) 中使用 mWindow = PolicyManager.makeNewWindow(this) 创建的。 mWindow 的真正类型是 PhoneWindow。
在 Activity.java 中使用 mWindow.setWindowManager(...) 将 Window 与 WindowManager 进行关联。而 mWindowManager 的真实类型是 LocalWindowManager ,LocalWindowManager 又使用代理 Proxy 模式,将任务委托给 WindowManagerImpl 处理。

在 ActivityThread.java 的 handleResumeActivity(IBinder token, boolean clearHide,boolean isForward) 方法中使用 wm.addView(decor,layoutParams) 进行了DecorView与ViewManager关联。
在 wm.addView(decor,layoutParams) 中使用了 ViewRoot ,下面介绍 ViewRoot。
-
ViewRoot 继承了 Hanlder ,能处理消息。
-
ViewRoot 有一个 Surface 类型的成员变量
mSurface -
ViewRoot 还有一个用于 Binder 通信的 IWindow.Stub 类型和一个 View 类型的
mView变量。

Surface 就是实实在在的画布。
ViewRoot 生成函数中将建立 Activity 的 ViewRoot 和 WindowManagerService 的关系。之后会有和 WindowsManagerService 的跨进程通信,Activity 的显示不单纯是自己的事。
WindowManagerService 是由 System_Server 启动, SurfaceFlinger 服务也在这个进程中。
Activity 的显示就是由 ViewRoot 在它的 performTraversals 函数中完成。
整个 Activity 的绘图流程就是从 mSurface 中lock一块 Canvas ,然后交给 mView 去自由发挥,完了unlock。
,

01.05
android:inputType=""属性有text,mutiText等,text默认的是一行,会覆盖singleLine属性,设置多行一行时要注意。
UI心得,透明许多时候能成为实现效果的捷径。
canvas画文字时可以指定对齐方式,常用的如 mTextRecordPaint.setTextAlign(Paint.Align.CENTER); 居中对齐,这样就不用计算文字的宽高了。
01.06
android:duplicateParentState 指的是当前控件是否跟随父控件的(点击、焦点等)状态, 常与 ListView 一起使用
ImageView的属性 android:scaleType 可以设定图片是否居中,是否适应 View宽高 等样式。
你又理解了Git是如何跟踪修改的,每次修改,如果不 add 到暂存区,那就不会加入到 commit 中。
01.08
初识 Surface
01.11 - 01.16
打了一个星期的酱油
CountDownTimer 可以用于实现定时器
blog comments powered by Disqus