[RK3288][Android5.1] 让开机动画(BootAnimation)提前一秒结束

动画在WindowManagerService停掉是最合适的,也就是说快要进入Android桌面前一秒让动画结束是允许被接受的。

vr_rk3288\frameworks\base\cmds\bootanimation\BootAnimation.cpp

vr_rk3288\frameworks\native\services\surfaceflinger\SurfaceFlinger.cpp

vr_rk3288\frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java


czz@xxx:~/vr_rk3288$ mmm frameworks/base/cmds/bootanimation/ -B -j24
czz@xxx:~/vr_rk3288$ mmm frameworks/native/services/surfaceflinger -B -j24
czz@xxx:~/vr_rk3288$ mmm frameworks/base/services/ -B -j24
czz@xxx:~/vr_rk3288$ ./mkimage.sh

C:\Users\Administrator>adb logcat -s -vtime BootAnimation
C:\Users\Administrator>adb logcat -s -vtime SurfaceFlinger
C:\Users\Administrator>adb logcat -s -vtime WindowManagerService

C:\Users\Administrator>adb root
C:\Users\Administrator>adb remount
C:\Users\Administrator>adb out\target\product\rk3288\system\framework\services.jar system/framework/
C:\Users\Administrator>adb reboot


 以上都是编译和调试的部分,属于题外话。本人调试/探索答案的过程中的摸索。

只要修改 WindowManagerService.java的部分就可以让动画提前一秒结束。

    public void enableScreenAfterBoot() {
     Slog.e(TAG, "ENABLESCREENAFTERBOOT");
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, // BOOT_FINISHED
                data, null, 0);                                                 
        data.recycle();                                                         
    }                                                                           
} catch (RemoteException ex) {                                                  
    Slog.e(TAG, "Boot completed: SurfaceFlinger is dead!");                     
}     
//...


当然了,这里面用到了 binder机制。从上层到下层。

这个try -catch 在 WindowManagerService.java 文件中其他的位置也有提到。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值