Android系统的开机画面显示过程分析(13)
- public class WindowManagerService extends IWindowManager.Stub
- implements Watchdog.Monitor {
- ......
- public void performEnableScreen() {
- synchronized(mWindowMap) {
- if (mDisplayEnabled) {
- return;
- }
- if (!mSystemBooted) {
- return;
- }
- ......
- mDisplayEnabled = true;
- ......
- try {
- IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger");
- if (surfaceFlinger != null) {
- //Slog.i(TAG, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");
- Parcel data = Parcel.obtain();
- data.writeInterfaceToken("android.ui.ISurfaceComposer");
- surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION,
- data, null, 0);
- data.recycle();
- }
- } catch (RemoteException ex) {
- Slog.e(TAG, "Boot completed: SurfaceFlinger is dead!");
- }
- }
- ......
- }
- ......
- }
WindowManagerService类的另外一个成员变量mDisplayEnabled用来描述WindowManagerService是否已经初始化过系统的屏幕了,只有当它的值等于false,并且系统已经完成启动,即WindowManagerService类的成员变量mSystemBooted等于true的情况下,WindowManagerService类的成员函数performEnableScreen才通知SurfaceFlinger服务停止显示开机动画。
- class BnSurfaceComposer : public BnInterface<ISurfaceComposer>
- {
- public:
- enum {
- // Note: BOOT_FINISHED must remain this value, it is called from
- // Java by ActivityManagerService.
- BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
- ......
- };
- virtual status_t onTransact( uint32_t code,
- const Parcel& data,
- Parcel* reply,
- uint32_t flags = 0);
- };
- void SurfaceFlinger::bootFinished()
- {
- const nsecs_t now = systemTime();
- const nsecs_t duration = now - mBootTime;
- LOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) );
- mBootFinished = true;
- property_set("ctl.stop", "bootanim");
- }
- void handle_control_message(const char *msg, const char *arg)
- {
- if (!strcmp(msg,"start")) {
- msg_start(arg);
- } else if (!strcmp(msg,"stop")) {
- msg_stop(arg);
- } else {
- ERROR("unknown control msg '%s'\n", msg);
- }
- }
- static void msg_stop(const char *name)
- {
- struct service *svc = service_find_by_name(name);
- if (svc) {
- service_stop(svc);
- } else {
- ERROR("no such service '%s'\n", name);
- }
- }
Android系统的开机画面显示过程分析(13)相关推荐
- Android系统的开机画面显示过程分析
提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了.Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段.本文将详细分析这三个开 ...
- Android系统的开机画面显示过程分析(8)
3. 第三个开机画面的显示过程 第三个开机画面是由应用程序bootanimation来负责显示的.应用程序bootanimation在启动脚本init.rc中被配置成了一个服 ...
- 安卓linux开机画面,Android系统的开机画面显示过程分析(1)
好几个月都没有更新过博客了,从今天开始,老罗将尝试对Android系统的UI实现作一个系统的分析,也算是落实之前所作出的承诺.提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的 ...
- Android系统的开机画面显示过程分析(5)
2. 第二个开机画面的显示过程 由于第二个开机画面是在init进程启动的过程中显示的,因此,我们就从init进程的入口函数main开始分析第二个开机画面的显示过程. init进 ...
- Android系统手机开机画面各个阶段代码执行流程分析(Part2)
3. 第三个开机画面的显示过程 第三个开机画面是由应用程序bootanimation来负责显示的.应用程序bootanimation在启动脚本init.rc中被配置成了一个服务,如下所示: servi ...
- Android系统定制开机logo和开机动画
定制开机logo和开机动画 开机logo 开机动画 bootanimation.zip 生成zip文件 添加新的开机动画 开机logo MTK ASOP中lk阶段的logo是开机后的第一个界面,也被称 ...
- Android系统手机开机画面各个阶段代码执行流程分析(Part1)
提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了.Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段.本文将详细分析这三个开 ...
- android系统修改开机动画
前提须知 开机动画是bootanimation.zip文件,包含part0和desc.txt两部分. part0文件夹:存放与屏幕分辨率相同的图片,图片命名数字递增. desc.txt文本:配置图片如 ...
- Android系统Surface机制的SurfaceFlinger服务的启动过程分析
在前面一篇文章中,我们简要介绍了Android系统Surface机制中的SurfaceFlinger服务.SurfaceFlinger服务是在System进程中启动的,并且负责统一管理设备的帧缓冲区. ...
最新文章
- [转]Hyper-V功能大跃进 或引发市场洗牌
- java 根据客户端重定向_JavaWeb【1.4HttpServletResponse类、重定向】
- vue怎么让接口带上cookie_在Vue中怎么使用cookie 之 vue-cookies
- android中虚拟程序停止,为什么我的在虚拟机运行后出现应用程序停止运行
- 最新emlog媒体范美化版v6.3.1
- ServiceComb java-chassis和CSE java-chassis的区别
- [转]OAuth 认证步骤
- Microsoft SQL Server 2000 索引碎片整理最佳实践(上)
- NSCT(Nonsubsampled Contourlet变换)
- 给CentOS 6.7 配置IP地址
- 【工具封装】不用 for 循环, 教你如何向MySQL数据库批量插入数据
- [读书][笔记]WINDOWS PE权威指南《零》PE基础
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
- Titan学习笔记-初识
- Java中的委托和继承(Delegation and Inheritance)
- 华为智慧搜索 v9.1.2.300
- 11B Cosmos 平台手写笔画显示比较滞后问题
- 给90后发了面试邀请,可他却因为“薪酬面议”拒绝了
- 加强顶层设计 推动数字出版高质量发展
- 延时函数delay与sleep有什么区别呢?