Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp

init进程把我们的BootAnimation的二进制文件拉起来了,

从进程的main方法入手

在这里插入图片描述

bootAnimationDisabled判断开机动画有没有被禁止。

bootAnimationDisabled为false就是能看到开机动画。进入if条件,

ProcessState::self()->startThreadPool();启动一个线程池,用来初始化一些binder跨进程通信的一些属性,绘制图形都需要依赖waitForSurfaceFlinger();,要等SurfaceFlinger进程启动了开机动画才有用,

看下构造方法做了什么

在这里插入图片描述

mSession = new SurfaceComposerClient();binder调用的一个代理对象,主要是跨进程通信和 SurfaceFinger,

判断开关机的一个属性

std::string powerCtl = android::base::GetProperty("sys.powerctl", "");
    if (powerCtl.empty()) {
        mShuttingDown = false;
    } else {
        mShuttingDown = true;
    }

sp是一个智能指针,如果有sp这个东西就会有对应的下面的这个类,,就会执行这个类。

void BootAnimation::onFirstRef() {
    status_t err = mSession->linkToComposerDeath(this);
    SLOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err));
    if (err == NO_ERROR) {
        // Load the animation content -- this can be slow (eg 200ms)
        // called before waitForSurfaceFlinger() in main() to avoid wait
        ALOGD("%sAnimationPreloadTiming start time: %" PRId64 "ms",
                mShuttingDown ? "Shutdown" : "Boot", elapsedRealtime());
        preloadAnimation();
        ALOGD("%sAnimationPreloadStopTiming start time: %" PRId64 "ms",
                mShuttingDown ? "Shutdown" : "Boot", elapsedRealtime());
    }
}

Bootanimation继承自Thread类

在这里插入图片描述

先会执行readyToRun,然后执行threadLoop

在这里插入图片描述

在这里插入图片描述

mDisplayToken = SurfaceComposerClient::getInternalDisplayToken();
    if (mDisplayToken == nullptr)
        return -1;

    DisplayInfo dinfo;
    status_t status = SurfaceComposerClient::getDisplayInfo(mDisplayToken, &dinfo);
    if (status)
        return -1;

获取屏幕信息之后,直接跟SufaceFinger通信的一个control

// create the native surface
    sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),
            dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565);

control构建一个画布。主要是和SufaceFinger通信。

初始化opengl

在这里插入图片描述

开机动画路径

在这里插入图片描述

在这里插入图片描述

static const char OEM_BOOTANIMATION_FILE[] = "/oem/media/bootanimation.zip";
static const char PRODUCT_BOOTANIMATION_DARK_FILE[] = "/product/media/bootanimation-dark.zip";

我们的开机动画主要走这个方法

在这里插入图片描述

检查退出

在这里插入图片描述

设置一个开机动画退出的属性,值为1就是退出。

在这里插入图片描述

用命令可以搜索一下它这个属性在什么地方会被设置为1

在这里插入图片描述

在WMS中

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 02:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 02:58:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 02:58:02       82 阅读
  4. Python语言-面向对象

    2024-06-06 02:58:02       91 阅读

热门阅读

  1. OnlyOffice DocumentServer 8.0.1编译破解版本(¥100)

    2024-06-06 02:58:02       26 阅读
  2. 更改 Docker 的默认存储位置

    2024-06-06 02:58:02       34 阅读
  3. 在Go语言中如何使用变量

    2024-06-06 02:58:02       27 阅读
  4. 【4】MySQL数据库-备份

    2024-06-06 02:58:02       26 阅读
  5. Oracle大表在线重新分区

    2024-06-06 02:58:02       30 阅读
  6. linux各个日志的含义 以及使用方法

    2024-06-06 02:58:02       36 阅读
  7. 服务器硬件基础知识

    2024-06-06 02:58:02       31 阅读
  8. Linux文件系统杂记

    2024-06-06 02:58:02       26 阅读
  9. ORACLE RAC的一些基本理论知识

    2024-06-06 02:58:02       20 阅读