第二次启动android app的过程分析

网上关于在Launcher上第一次启动app的过程分析已经很多了,今天吃饭的时候在思考一个问题:我在Launcher上打开淘宝,切换到购物车,按Home键回到Launcher,再次点开淘宝的时候仍然是购物车页面。按说Launcher每次点开app都是启动同一个activityACTION_MAIN , CATEGORY_LAUNCHER),那么这步转换是在哪里完成的呢?

回来翻了翻代码,找到了答案:(有点长,后面会一步一步分析)

final int startActivityUncheckedLocked(final ActivityRecord r, ActivityRecord sourceRecord,
      IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags,
        boolean doResume, Bundle options, TaskRecord inTask) {
    ... ...
    boolean addingToTask = false;
    TaskRecord reuseTask = null;
    ... ...
    if (((launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0 &&
            (launchFlags & Intent.FLAG_ACTIVITY_MULTIPLE_TASK) == 0)
        if (inTask == null && r.resultTo == null) {
            ActivityRecord intentActivity = !launchSingleInstance ?
                    findTaskLocked(r) : findActivityLocked(intent, r.info);
            if (intentActivity != null) {
                ... ...
                if (r.task == null) {
                    r.task = intentActivity.task;
                }
                if (intentActivity.task.intent == null) {
                    intentActivity.task.setIntent(r);
                }
                targetStack = intentActivity.task.stack;
                targetStack.mLastPausedActivity = null;
                final ActivityStack focusStack = getFocusedStack();
                ActivityRecord curTop = (focusStack == null)
                        ? null : focusStack.topRunningNonDelayedActivityLocked(notTop);
                boolean movedToFront = false;
                if (curTop != null && (curTop.task != intentActivity.task ||
                    curTop.task != focusStack.topTask())) {
                    r.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                    if (sourceRecord == null || (sourceStack.topActivity() != null &&
                        sourceStack.topActivity().task == sourceRecord.task)) {
                        ... ...
                        movedHome = true;
                        targetStack.moveTaskToFrontLocked(intentActivity.task,
                                       noAnimation, options, r.appTimeTracker, 
                                       "bringingFoundTaskToFront");
                        movedToFront = true;
                        ... ...
                    }
                ... ...
                }
                ... ...
                if (!addingToTask &&am
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值