android 开机动画和开机视频流程分析基于android4.4

本文深入分析了基于Android 4.4系统的开机动画和开机视频的流程。通过 BootAnimation 类的 threadLoop 方法,详细解释了在启动过程中android() 和 movie() 两个关键部分的功能,揭示了开机动画的实现细节。
   android 开机画面是由应用程序bootanimation来负责显示的,主要类BootAnimation.cpp直接继承于android中定义的一个Thread, 接地继承了RefBase类,并且重写了RefBase类的成员函数onFirstRef,因此,当一个BootAnimation对象第一次被引用的时,这个BootAnimation对象的成员函数onFirstRef就会被调用。
    当应用程序启动时,是先从main开始,具体代码如下:
        sp<BootAnimation> boot = new BootAnimation();
        //add video boot
        memset(value,0,sizeof(value));
        property_get("service.bootvideo", value, "0");
        gUseBootVideo = (atoi(value) == 1 ? true : false);

        if(gUseBootVideo){
           // boot->setBootVolume();
           /* modify,bootanimation path */
           /*before modify code(property_set("service.bootvideo", "2");)*/
           if (access(USER_BOOTVIDEO_FILE, R_OK) == 0) {
               property_set("service.bootvideo", "2");
           }else{
               gUseBootVideo = false;
           }
           /*modify end */
        }
如果access(USER_BOOTVIDEO_FILE, R_OK) == 0),即bootvideo文件存在则会执行property_set("service.bootvideo", "2"),则启动系统内的视频播放应用程序LibPlayer播放开机视频,同时gUseBootVideo =true代表bootanimation播放的是开机视频。否则播放开机动画。
   所以当开机视频文件bootvideo存在时,应用程序bootanimation会做2件事情:
       一:执行到sp<BootAnimation> boot = new BootAnimation();时会调用BootAnimation对象的成员函数onFirstRe,在onFirstRe里会执行线程的run方法,然后会调用动画的android或movie方法来显示动画(既然是为了播放开机视频,开机动画就没必要播放,后续在播放动画的方法中必须跳过GLES的绘图逻辑以免出现动画和视频同时出现的BUG)。
      二:执行 到property_set("service.bootvideo", "2");时,则启动系统内的视频播放应用程序LibPlayer播放开机视频。


      之前说到BootAnimation对象的成员函数onFirstRe执行后会经过一系列的调用最终执行到播放开机动画,具体流程如下:
1.在onFirstRe中调用 run("BootAnimation", PRIORITY_DISPLAY);创建线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值