美文网首页
Activity启动过程调用

Activity启动过程调用

作者: 梦无心 | 来源:发表于2018-06-12 15:12 被阅读0次

1.入口 ActivityThread.main()

 ActivityThread thread = new ActivityThread();
 thread.attach(false);

2.Activity.attach()

final IActivityManager mgr = ActivityManagerNative.getDefault();
        try {
            mgr.attachApplication(mAppThread);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }

通过IBinder调用获取ActivityManager对象,把当前创建的ActivityThread与ActivityManager对象进行关联。

3.通过IBinder对象回调ActivityThread.scheduleLaunchActivity(),在这个方法中new ActivityClientRecord对象,并设置一堆参数,在给Handler发消息

     ActivityClientRecord r = new ActivityClientRecord();
        r.token = token;
        r.ident = ident;
        r.intent = intent;
        r.referrer = referrer;
        r.voiceInteractor = voiceInteractor;
        r.activityInfo = info;
        r.compatInfo = compatInfo;
        r.state = state;
        r.persistentState = persistentState;

        r.pendingResults = pendingResults;
        r.pendingIntents = pendingNewIntents;

        r.startsNotResumed = notResumed;
        r.isForward = isForward;

        r.profilerInfo = profilerInfo;

        r.overrideConfig = overrideConfig;
        updatePendingConfiguration(curConfig);

        sendMessage(H.LAUNCH_ACTIVITY, r);

4.ActivityThread.handlerMessage() 方法接收到消息会调用handleLaunchActivity()方法

handleLaunchActivity(r, null, "LAUNCH_ACTIVITY")`;

5.ActivityThread.handleLaunchActivity()方法会调用performLaunchActivity()方法获取到Activity对象,这里面是用反射获取Activity对象。

Activity a = performLaunchActivity(r, customIntent);

6.ActivityThread.performLaunchActivity()方法会调用activity.attach方法,在往下走调用了
mInstrumentation.callActivityOnCreate()方法,这样就走到mInstrumentation.callActivityOnCreate()方法,最后调用activity.performStart()方法;

     activity.attach(appContext, this, getInstrumentation(), r.token,
                    r.ident, app, r.intent, r.activityInfo, title, r.parent,
                    r.embeddedID, r.lastNonConfigurationInstances, config,
                    r.referrer, r.voiceInteractor, window);
                    
     if (r.isPersistable()) {
                mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
            } else {
                mInstrumentation.callActivityOnCreate(activity, r.state);
            }
            
    if (!r.activity.mFinished) {  
                activity.performStart();  
                r.stopped = false;  
            }  

这样 Activityattach(),onCreate(),onStart() 都执行了。这个方法执行完在返回 ActivityThread.handleLaunchActivity 中,
往下走会调用 handleResumeActivity() 方法,这个方法中调用 performResumeActivity(),这个方法中调用 r.activity.performResume(),从而调用到 Activity.onResume()

相关文章

  • Activity的启动过程分析

    Activity的启动过程 首先先列出Activity启动的过程中调用的一些方法,因为activity启动涉及到各...

  • Android - 一篇读懂Activity组件

    一、Activity启动流程 关键的过程: Activity1调用startActivity,实际会调用Instr...

  • Activity启动过程分析

    Activity启动过程分析 通常我们在Activity中启动一个另一个Activity,就是调用Activity...

  • activity 启动分析

    activity两种启动:launcher 启动 和 activity 调用启动 一、launcher 启动调用 ...

  • Activity启动过程-Android 27API

    简录 Activity启动过程 Launcher请求AMS过程[1] ApplicationThread的调用过程...

  • Activity启动过程调用

    1.入口 ActivityThread.main() 2.Activity.attach() 通过IBinder调...

  • Android-View的绘制

    View的绘制过程android程序启动--->Activity加载--->View的绘制 1、前期调用 2、调用...

  • Activity

    生命周期流程图: Activity生命周期执行过程: (1)启动Activity:系统会先调用onCreate()...

  • Activity的启动过程

    这篇文章我们来介绍Activity的工作过程. 首先,如果我们要启动一个Activity,会调用Activity的...

  • 基础知识复习 Choreographer

    1.Choreographer的启动 启动流程图 在Activity启动过程,执行完onResume后,会调用Ac...

网友评论

      本文标题:Activity启动过程调用

      本文链接:https://www.haomeiwen.com/subject/ryzleftx.html