课题组网站怎么做,秦皇岛住房和城乡建设网官网,目录网站开发,网站建设工作室北京小俊哥文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41)
路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp
init进程把我们的BootAnimation的二进制文件拉起来了#xf… 文章目录 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 waitALOGD(%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 surfacespSurfaceControl 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中