Android Activity切换onstop的调用流程是怎样的

Android Activity切换onstop的调用流程是怎样的?

主要有一下两种情况,会调用触发Activity调用onStop:
1.activityIdle 触发

12-31 16:35:20.977   912  1895 D ActivityTaskManager: Stopping: ActivityRecord{8467d38 u0 com.android.launcher3/.Launcher t37}, callstack =
12-31 16:35:20.977   912  1895 D ActivityTaskManager: java.lang.Throwable
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.stopIfPossible(ActivityRecord.java:5036)
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor.processStoppingAndFinishingActivities(ActivityStackSupervisor.java:1863)
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor.activityIdleInternal(ActivityStackSupervisor.java:1326)
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.activityIdle(ActivityTaskManagerService.java:1838)
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1920)
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1159)
12-31 16:35:20.977   912  1895 D ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:1123)
  1. onAnimationFinished触发
12-31 16:35:23.208   912  1047 D ActivityTaskManager: Stopping: ActivityRecord{8467d38 u0 com.android.launcher3/.Launcher t37}, callstack =
12-31 16:35:23.208   912  1047 D ActivityTaskManager: java.lang.Throwable
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.stopIfPossible(ActivityRecord.java:5036)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor.processStoppingAndFinishingActivities(ActivityStackSupervisor.java:1863)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor.access$300(ActivityStackSupervisor.java:158)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor$ActivityStackSupervisorHandler.handleMessageInner(ActivityStackSupervisor.java:2432)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor$ActivityStackSupervisorHandler.handleMessage(ActivityStackSupervisor.java:2351)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at android.os.Handler.dispatchMessage(Handler.java:106)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at android.os.Looper.loop(Looper.java:223)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at android.os.HandlerThread.run(HandlerThread.java:67)
12-31 16:35:23.208   912  1047 D ActivityTaskManager: 	at com.android.server.ServiceThread.run(ServiceThread.java:44)
   @Override
    protected void onAnimationFinished(@AnimationType int type, AnimationAdapter anim) {
        super.onAnimationFinished(type, anim);

        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "AR#onAnimationFinished");
        mTransit = TRANSIT_UNSET;
        mTransitFlags = 0;
        mNeedsAnimationBoundsLayer = false;

        setAppLayoutChanges(FINISH_LAYOUT_REDO_ANIM | FINISH_LAYOUT_REDO_WALLPAPER,
                "ActivityRecord");

        clearThumbnail();
        setClientVisible(isVisible() || mVisibleRequested);

        getDisplayContent().computeImeTargetIfNeeded(this);

        if (DEBUG_ANIM) Slog.v(TAG, "Animation done in " + this
                + ": reportedVisible=" + reportedVisible
                + " okToDisplay=" + okToDisplay()
                + " okToAnimate=" + okToAnimate()
                + " startingDisplayed=" + startingDisplayed);

        // clean up thumbnail window
        if (mThumbnail != null) {
            mThumbnail.destroy();
            mThumbnail = null;
        }

        // WindowState.onExitAnimationDone might modify the children list, so make a copy and then
        // traverse the copy.
        final ArrayList<WindowState> children = new ArrayList<>(mChildren);
        children.forEach(WindowState::onExitAnimationDone);

        getDisplayContent().mAppTransition.notifyAppTransitionFinishedLocked(token);
        scheduleAnimation();

        if (!mStackSupervisor.mStoppingActivities.isEmpty()
                || !mStackSupervisor.mFinishingActivities.isEmpty()) {
            if (mRootWindowContainer.allResumedActivitiesIdle()) {
                // If all activities are already idle then we now need to make sure we perform
                // the full stop of this activity. This is because we won't do that while they
                // are still waiting for the animation to finish.
                mStackSupervisor.scheduleIdle();
            } else if (mRootWindowContainer.allResumedActivitiesVisible()) {
                // If all resumed activities are already visible (and should be drawn, see
                // updateReportedVisibility ~ nowVisible) but not idle, we still schedule to
                // process the stopping and finishing activities because the transition is done.
                // This also avoids if the next activity never reports idle (e.g. animating view),
                // the previous will need to wait until idle timeout to be stopped or destroyed.
                mStackSupervisor.scheduleProcessStoppingAndFinishingActivities();
            }
        }
        Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值