Activity切換 窗口繪製顯示

08-29 18:12:26.910 I/ActivityManager( 1587): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.dangbeimarket cmp=com.dangbeimarket/.activity.WelcomeActivity} from pid 2225
08-29 18:12:26.920 D/ActivityManager( 1587): Looking for task of ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t-1}
08-29 18:12:26.920 D/ActivityManager( 1587): Looking for task of ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t-1} in ActivityStack{423ca958 stackId=0, 1 tasks}

08-29 18:12:26.925 V/ActivityManager( 1587): Starting new activity ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3} in new task TaskRecord{42939110 #3 A=com.dangbeimarket U=0 sz=0}
08-29 18:12:26.945 D/SurfaceFlinger( 1158): captureScreen: opTimingWidth = 1280, opTimingHeight = 720, maxLayerZ = 21010
08-29 18:12:26.955 V/WindowManager( 1587): Adding window Window{42819a20 u0 Starting com.dangbeimarket} at 3 of 5 (after Window{428e3a68 u0 com.android.launcher/.AppActivity})
08-29 18:12:26.960 I/AppActivity( 2225): onPause
08-29 18:12:26.960 D/launcher( 2225): onPause()
08-29 18:12:26.960 V/WindowStateAnimator( 1587): Creating surface in session android.view.SurfaceSession@4233f330 window WindowStateAnimator{428b4520 Starting com.dangbeimarket} w=0 h=0 format=-1 flags=4

08-29 18:12:26.980 E/WindowManager( 1587):     at com.android.server.wm.AppWindowToken.updateReportedVisibilityLocked(AppWindowToken.java:139)
08-29 18:12:26.980 E/WindowManager( 1587):     at com.android.server.wm.WindowManagerService.relayoutWindow(WindowManagerService.java:3028)
08-29 18:12:26.980 E/WindowManager( 1587):     at com.android.server.wm.Session.relayout(Session.java:190)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:5079)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1410)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.Choreographer.doFrame(Choreographer.java:544)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.os.Handler.handleCallback(Handler.java:733)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.os.Looper.loop(Looper.java:136)
08-29 18:12:26.980 E/WindowManager( 1587):     at android.os.HandlerThread.run(HandlerThread.java:61)

08-29 18:12:26.980 V/WindowManager( 1587): Update reported visibility: AppWindowToken{428cb600 token=Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}}
08-29 18:12:26.980 V/WindowManager( 1587): VIS AppWindowToken{428cb600 token=Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}}: interesting=0 visible=0

08-29 18:12:27.025 V/WindowManager( 1587): setAppVisibility(Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}, visible=true): mNextAppTransition=0x1008 hidden=true hiddenRequested=true
08-29 18:12:27.025 V/WindowManager( 1587): Setting dummy animation on: AppWindowToken{428cb600 token=Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}}
08-29 18:12:27.025 V/WindowManager( 1587): setAppVisibility(Token{4293daa8 ActivityRecord{42938ac8 u0 com.android.launcher/.AppActivity t2}}, visible=false): mNextAppTransition=0x1008 hidden=false hiddenRequested=false
08-29 18:12:27.025 V/WindowManager( 1587): Setting dummy animation on: AppWindowToken{42924d08 token=Token{4293daa8 ActivityRecord{42938ac8 u0 com.android.launcher/.AppActivity t2}}}
08-29 18:12:27.030 V/WindowManager( 1587): Eval win Window{42819a20 u0 Starting com.dangbeimarket}: isDrawn=true, isAnimating=true

08-29 18:12:27.045 W/WindowManager( 1587): Execute app transition: mNextAppTransition=0x1008
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.wm.AppWindowToken.updateReportedVisibilityLocked(AppWindowToken.java:139)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.wm.WindowManagerService.handleAppTransitionReadyLocked(WindowManagerService.java:8672)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.wm.WindowManagerService.performLayoutAndPlaceSurfacesLockedInner(WindowManagerService.java:9303)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.wm.WindowManagerService.performLayoutAndPlaceSurfacesLockedLoop(WindowManagerService.java:8273)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.wm.WindowManagerService.performLayoutAndPlaceSurfacesLocked(WindowManagerService.java:8215)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.wm.WindowManagerService.executeAppTransition(WindowManagerService.java:3950)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStackSupervisor.reportResumedActivityLocked(ActivityStackSupervisor.java:2362)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStack.completeResumeLocked(ActivityStack.java:1001)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStack.minimalResumeActivityLocked(ActivityStack.java:617)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1079)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1120)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1694)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStackSupervisor.resumeTopActivitiesLocked(ActivityStackSupervisor.java:2096)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:944)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:849)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:5293)
08-29 18:12:27.080 E/WindowManager( 1587):     at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:426)
08-29 18:12:27.080 E/WindowManager( 1587):     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2108)
08-29 18:12:27.080 E/WindowManager( 1587):     at android.os.Binder.execTransact(Binder.java:404)
08-29 18:12:27.080 E/WindowManager( 1587):     at dalvik.system.NativeStart.run(Native Method)

08-29 18:12:27.080 V/AppWindowAnimator( 1587): performing show on: WindowStateAnimator{428b4520 Starting com.dangbeimarket}
g=true tok animating=false
08-29 18:12:27.080 V/WindowStateAnimator( 1587): Showing WindowStateAnimator{428b4520 Starting com.dangbeimarket} during animation: policyVis=true attHidden=false tok.hiddenRequested=false tok.hidden=false animating=true tok animating=false

08-29 18:12:27.095 V/WindowStateAnimator( 1587): Showing Window{42819a20 u0 Starting com.dangbeimarket} during relayout

08-29 18:12:27.170 V/WindowManager( 1587): Adding window Window{42358f98 u0 com.dangbeimarket/com.dangbeimarket.activity.WelcomeActivity} at 3 of 6 (before Window{42819a20 u0 Starting com.dangbeimarket})
se animating=false tok animating=false

08-29 18:12:27.440 V/WindowManager( 1587): Eval win Window{42819a20 u0 Starting com.dangbeimarket}: isDrawn=true, isAnimating=true
08-29 18:12:27.440 V/WindowManager( 1587): Eval win Window{42358f98 u0 com.dangbeimarket/com.dangbeimarket.activity.WelcomeActivity}: isDrawn=false, isAnimating=true
08-29 18:12:27.440 V/WindowManager( 1587): Not displayed: s=Surface(name=com.dangbeimarket/com.dangbeimarket.activity.WelcomeActivity) pv=true mDrawState=1 ah=false th=false a=true
08-29 18:12:27.445 W/WindowStateAnimator( 1587): Window WindowStateAnimator{428e4100 com.android.launcher/.AppActivity} destroying surface Surface(name=com.android.launcher/.AppActivity), session Session{42992778 2225:u0a10015}
08-29 18:12:27.445 W/WindowStateAnimator( 1587): Window WindowStateAnimator{42a60908 SurfaceView} destroying surface Surface(name=SurfaceView), session Session{42992778 2225:u0a10015}
se animating=false tok animating=false
08-29 18:12:27.505 V/WindowManager( 1587): Eval win Window{42819a20 u0 Starting com.dangbeimarket}: isDrawn=true, isAnimating=true
08-29 18:12:27.505 V/WindowManager( 1587): Eval win Window{42358f98 u0 com.dangbeimarket/com.dangbeimarket.activity.WelcomeActivity}: isDrawn=true, isAnimating=true
08-29 18:12:27.505 V/WindowManager( 1587): tokenMayBeDrawn: AppWindowToken{428cb600 token=Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}} freezingScreen=false mAppFreezing=false
08-29 18:12:27.505 V/WindowManager( 1587): allDrawn: AppWindowToken{428cb600 token=Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}} interesting=1 drawn=1

08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.AppWindowToken.updateReportedVisibilityLocked(AppWindowToken.java:139)
08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.WindowStateAnimator.performShowLocked(WindowStateAnimator.java:1480)
08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.WindowAnimator.updateWindowsLocked(WindowAnimator.java:311)
08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.WindowAnimator.performAnimationsLocked(WindowAnimator.java:453)
08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.WindowAnimator.animateLocked(WindowAnimator.java:497)
08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.WindowAnimator.access$000(WindowAnimator.java:36)
08-29 18:12:27.520 E/WindowManager( 1587):     at com.android.server.wm.WindowAnimator$1.run(WindowAnimator.java:98)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.view.Choreographer.doFrame(Choreographer.java:543)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.os.Handler.handleCallback(Handler.java:733)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.os.Looper.loop(Looper.java:136)
08-29 18:12:27.520 E/WindowManager( 1587):     at android.os.HandlerThread.run(HandlerThread.java:61)

08-29 18:12:27.520 V/WindowStateAnimator( 1587): Showing Window{42358f98 u0 com.dangbeimarket/com.dangbeimarket.activity.WelcomeActivity} during relayout
08-29 18:12:27.520 V/AppWindowAnimator( 1587): performing show on: WindowStateAnimator{428b4520 Starting com.dangbeimarket}
g=true tok animating=true
08-29 18:12:27.525 I/ActivityManager( 1587): Displayed com.dangbeimarket/.activity.WelcomeActivity: +501ms
08-29 18:12:27.525 V/WindowManager( 1587): Reporting drawn in AppWindowToken{428cb600 token=Token{42802438 ActivityRecord{428590c0 u0 com.dangbeimarket/.activity.WelcomeActivity t3}}}

mHomeStack
mFocusedStack

ActivityStackSupervisor.java
    startActivityLocked
    Slog.i(TAG, "START u" + userId + " {" + intent.toShortString(true, true, true, false)+ "} from pid " + (callerApp != null ? callerApp.pid : callingPid));
        startActivityUncheckedLocked
            findTaskLocked//查找當前task是否有該activity
            //有的話就恢復到前臺頂端
            resumeTopActivitiesLocked(targetStack, null, options);
            //沒有的話就創建一個新的task
            if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new task " +
                        r.task);
            targetStack.startActivityLocked(r, newTask, doResume, keepCurTransition, options);
    
    findTaskLocked
        if (DEBUG_TASKS) Slog.d(TAG, "Looking for task of " + r);
        stack.findTaskLocked(r);
ActivityStack.java
    findTaskLocked
        if (DEBUG_TASKS) Slog.d(TAG, "Looking for task of " + target + " in " + this);
        if (DEBUG_TASKS) Slog.d(TAG, "Skipping " + task + ": mismatch root " + r);
        
    startActivityLocked    
        mWindowManager.addAppToken(task.mActivities.indexOf(r), r.appToken,r.task.taskId, mStackId, r.info.screenOrientation, r.fullscreen,(r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0, r.userId,r.info.configChanges);
        
WindowManagerService.java        
    addAppToken
        if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken
                    + " to stack=" + stackId + " task=" + taskId + " at " + addPos);
        mTokenMap.put(token.asBinder(), atoken);

WindowManagerImpl.java    
    mGlobal.addView
        
WindowManagerGlobal.java
    addView
        root.setView
        
ViewRootImpl.java
    setView
        addToDisplay
        
    cheduleTraversals
        doTraversal        
            performTraversals
                relayoutWindow
                    mWindowSession.relayout
        
Session.java
    addToDisplay
        mService.addWindow
            WindowToken token = mTokenMap.get(attrs.token);
            win = new WindowState(this, session, client, token,
                    attachedWindow, appOp[0], seq, attrs, viewVisibility, displayContent);
            res = mPolicy.prepareAddWindowLw(win, attrs);
            mInputManager.registerInputChannel(win.mInputChannel, win.mInputWindowHandle);
            
            addWindowToListInOrderLocked(win, true);
                placeWindowAfter
                    if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(
                        TAG, "Adding window " + window + " at "
                        + (i+1) + " of " + windows.size() + " (after " + pos + ")");
                        
                    windows.add(i+1, window);
                    mWindowsChanged = true;

            if (win.canReceiveKeys()) {
                focusChanged = updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS,
                        false /*updateInputWindows*/);
                if (focusChanged) {
                    imMayMove = false;
                }
            }
            if (imMayMove) {
                moveInputMethodWindowsIfNeededLocked(false);
            }
            //合成layers。各個Window
            assignLayersLocked(displayContent.getWindowList());
            // Don't do layout here, the window must call
            // relayout to be displayed, so we'll do it there.
    
    relayout    
        mService.relayoutWindow(this, window, seq, attrs,
                requestedWidth, requestedHeight, viewFlags, flags,
                outFrame, outOverscanInsets, outContentInsets, outVisibleInsets,
                outConfig, outSurface);    
                
WindowManagerService.java                
    relayoutWindow
        SurfaceControl surfaceControl = winAnimator.createSurfaceLocked();
        win.mAppToken.updateReportedVisibilityLocked();
        performLayoutAndPlaceSurfacesLocked
        
WindowStateAnimator.java        
    createSurfaceLocked

AppWindowToken.java    
    updateReportedVisibilityLocked    
        if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG,
                    "Update reported visibility: " + this);
        if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, "VIS " + this + ": interesting="
                    + numInteresting + " visible=" + numVisible);    
                            
WindowManagerService.java                                
performLayoutAndPlaceSurfacesLocked
    performLayoutAndPlaceSurfacesLockedInner        
    if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) {
                                        Slog.v(TAG, "Eval win " + w + ": isDrawn=" + w.isDrawnLw()
                                                + ", isAnimating=" + winAnimator.isAnimating());
                                                
Activity.java
    onPause                                                
ActivityStack.java
    resumeTopActivityLocked                    
        mWindowManager.setAppVisibility(prev.appToken, false);
        mWindowManager.setAppVisibility(next.appToken, true);    
        mStackSupervisor.startSpecificActivityLocked(next, true, true);
        
WindowManagerService.java        
    setAppVisibility    
        Slog.v(TAG, "setAppVisibility(" + token + ", visible=" + visible
                        + "): " + mAppTransition
                        + " hidden=" + wtoken.hidden
                        + " hiddenRequested=" + wtoken.hiddenRequested, e);
        if (DEBUG_APP_TRANSITIONS) Slog.v(
                            TAG, "Setting dummy animation on: " + wtoken);

ActivityStackSupervisor.java
    startSpecificActivityLocked
        reportResumedActivityLocked
        
        executeAppTransition
        performLayoutAndPlaceSurfacesLockedInner
            Slog.v(TAG, "Eval win " + w + ": isDrawn=" + w.isDrawnLw()
                                            + ", isAnimating=" + winAnimator.isAnimating());
            handleAppTransitionReadyLocked
        handleAppTransitionReadyLocked
            AppWindowToken wtoken = mOpeningApps.get(i);
            final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
            if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now opening app" + wtoken);            
            setTokenVisibilityLocked
                if (DEBUG_APP_TRANSITIONS) Slog.v(
                TAG, "Changing app " + wtoken + " hidden=" + wtoken.hidden
                + " performLayout=" + performLayout);
                applyAnimationLocked
            wtoken.updateReportedVisibilityLocked();
            appAnimator.showAllWindowsLocked();
                mService.scheduleAnimationLocked();
                    animateLocked
                        windows.get(j).mWinAnimator.prepareSurfaceLocked(true);
                            if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, "Showing " + w
                                + " during relayout");
            
            AppWindowToken wtoken = mClosingApps.get(i);
            if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now closing app " + wtoken);
            setTokenVisibilityLocked(wtoken, animLp, false, transit, false);
                if (DEBUG_APP_TRANSITIONS) Slog.v(
                TAG, "Changing app " + wtoken + " hidden=" + wtoken.hidden
                + " performLayout=" + performLayout);
                applyAnimationLocked
            wtoken.updateReportedVisibilityLocked();

AppWindowToken.java    
    updateReportedVisibilityLocked    
        if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG,
                    "Update reported visibility: " + this);
        if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, "VIS " + this + ": interesting="
                    + numInteresting + " visible=" + numVisible);

placeWindowBefore


總結:
window 窗口繪製:performLayoutAndPlaceSurfacesLockedInner
window 窗口可見性改變檢查:updateReportedVisibilityLocked

                    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章