网站 网页数量,dz论坛seo设置,微信如何做模板下载网站,室内设计师培训班费用一 android 动画分为app内的view动画和系统动画 基本原理都是监听Choreographer的doframe回调
二 app端的实现是主要通过AnimationUtils来实现具体属性的变化通过invilate来驱动 wms来进行更新。这个流程是在app进程完成
这里不是我分析的重点 直接来看下系统动画里面的本地动…一 android 动画分为app内的view动画和系统动画 基本原理都是监听Choreographer的doframe回调
二 app端的实现是主要通过AnimationUtils来实现具体属性的变化通过invilate来驱动 wms来进行更新。这个流程是在app进程完成
这里不是我分析的重点 直接来看下系统动画里面的本地动画app启动动画这个流程是在系统进程完成 这里分成三个部分的流程 动画的触发动画的加载动画的启动动画的关闭。
这里大概写下流程下面有具体的调用堆栈 1 触发 ams.attachapplicaton---activitystack.minimalresumeactivitylocked---rootwindowcontainner--displaycontent ---wms.requestTraversal--mService.mAnimationHandler.post(mPerformSurfacePlacement);(post 一个runnable消息给wms)
2 启动 ---rootwindowcontainer---performsurfaceplacementnotrace------apptransitioncontroller.applyanimations--- ---windowcontainer.applyanimationunchecked -----surfaceanimator.startanimation--(创建leash然后Transaction.reparent(surface,leash)) ---localanimationadapter(animationadapter的父类)---surfaceanimationrunner.startanimation--mChoreographer.postFramecallback 3 关闭 windowcontainer循环完后调用wms的onAnimationfinished。
三
详细动画执行流程 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.SurfaceAnimationRunner.startAnimation(SurfaceAnimationRunner.java:139) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.LocalAnimationAdapter.startAnimation(LocalAnimationAdapter.java:55) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.SurfaceAnimator.startAnimation(SurfaceAnimator.java:160) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.startAnimation(WindowContainer.java:2128) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowState.startAnimation(WindowState.java:5222) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowState.startMoveAnimation(WindowState.java:5218) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowState.handleWindowMovedIfNeeded(WindowState.java:2090) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.DisplayContent.lambda$new$8$DisplayContent(DisplayContent.java:884) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.-$$Lambda$DisplayContent$qxt4izS31fb0LF2uo_OF9DMa7gc.accept(Unknown Source:4) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer$ForAllWindowsConsumerWrapper.apply(WindowContainer.java:2003) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer$ForAllWindowsConsumerWrapper.apply(WindowContainer.java:1993) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowState.applyInOrderWithImeWindows(WindowState.java:4672) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowState.forAllWindows(WindowState.java:4571) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.ActivityRecord.forAllWindowsUnchecked(ActivityRecord.java:3632) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.ActivityRecord.forAllWindows(ActivityRecord.java:3627) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.TaskDisplayArea.forAllWindows(TaskDisplayArea.java:511) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1310) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1327) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.DisplayContent.applySurfaceChangesTransaction(DisplayContent.java:4010) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.RootWindowContainer.applySurfaceChangesTransaction(RootWindowContainer.java:1074) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:854) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:811) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:178) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:127) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:116) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.DisplayContent.layoutAndAssignWindowLayersIfNeeded(DisplayContent.java:3384) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5268) 01-01 14:48:34.775 1039 1153 I yang111 : at android.os.Handler.dispatchMessage(Handler.java:106) 01-01 14:48:34.775 1039 1153 I yang111 : at android.os.Looper.loop(Looper.java:223) 01-01 14:48:34.775 1039 1153 I yang111 : at android.os.HandlerThread.run(HandlerThread.java:67) 01-01 14:48:34.775 1039 1153 I yang111 : at com.android.server.ServiceThread.run(ServiceThread.java:44)
二 动画执行循环流程 01-01 14:39:38.477 1079 1150 I yang : at com.android.server.wm.SurfaceAnimationRunner.startAnimationLocked(SurfaceAnimationRunner.java:182) 01-01 14:39:38.477 1079 1150 I yang : at com.android.server.wm.SurfaceAnimationRunner.startPendingAnimationsLocked(SurfaceAnimationRunner.java:173) 01-01 14:39:38.477 1079 1150 I yang : at com.android.server.wm.SurfaceAnimationRunner.startAnimations(SurfaceAnimationRunner.java:248) 01-01 14:39:38.477 1079 1150 I yang : at com.android.server.wm.SurfaceAnimationRunner.lambda$9Wa9MhcrSX12liOouHtYXEkDU60(Unknown Source:0) 01-01 14:39:38.477 1079 1150 I yang : at com.android.server.wm.-$$Lambda$SurfaceAnimationRunner$9Wa9MhcrSX12liOouHtYXEkDU60.doFrame(Unknown Source:2) 01-01 14:39:38.477 1079 1150 I yang : at android.view.Choreographer$CallbackRecord.run(Choreographer.java:970) 01-01 14:39:38.477 1079 1150 I yang : at android.view.Choreographer.doCallbacks(Choreographer.java:796) 01-01 14:39:38.477 1079 1150 I yang : at android.view.Choreographer.doFrame(Choreographer.java:727) 01-01 14:39:38.477 1079 1150 I yang : at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957) 01-01 14:39:38.477 1079 1150 I yang : at android.os.Handler.handleCallback(Handler.java:938) 01-01 14:39:38.477 1079 1150 I yang : at android.os.Handler.dispatchMessage(Handler.java:99) 01-01 14:39:38.477 1079 1150 I yang : at android.os.Looper.loop(Looper.java:223) 01-01 14:39:38.477 1079 1150 I yang : at android.os.HandlerThread.run(HandlerThread.java:67) 01-01 14:39:38.477 1079 1150 I yang : at com.android.server.ServiceThread.run(ServiceThread.java:44)