小米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 可以用于实现定时器