`
daojin
  • 浏览: 690359 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Activity启动过程

 
阅读更多

启动activity:
**android.process.acore进程
1.Acticity.startActivityForResult()
2.Instrumention.execStartActivity();
3.ActivityManagerNative.getDefault()
                .startActivity()
  3.1 ActivityManagerNative.getDefault()返回的是ActivityManagerProxy的实例,
  它只是一个代理类,这个代理类实际上代理的是IBinder b = ServiceManager.getService("activity");
  这个Service。
  3.2 这个Service是什么时候添加进来的呢?
  在SystemServer.java的run()中有调用
  ActivityManagerService.setSystemProcess();
      ServiceManager.addService("activity", m);
      这里还会添加许多系统关键服务。
      (TODO:查看在SystemServer的Log输出)
     
**system_process进程
4 ActivityManagerNative
    |--ActivityManagerService
   
    在ActivityManagerNative的onTransact方法中最终提供了服务:
    case START_ACTIVITY_TRANSACTION:
      ActivityManagerService.startActivity();
        --startActivityLocked(IApplicationThread caller,
            Intent intent, String resolvedType,
            Uri[] grantedUriPermissions,
            int grantedMode, ActivityInfo aInfo, IBinder resultTo,
            String resultWho, int requestCode,
            int callingPid, int callingUid, boolean onlyIfNeeded,
            boolean componentSpecified)
          --startActivityUncheckedLocked(r, sourceRecord,
                grantedUriPermissions, grantedMode, onlyIfNeeded, true)
          在这个方法里面检查权限,解析intent中的Flag。。。
          --startActivityLocked(HistoryRecord r, boolean newTask)
            --resumeTopActivityLocked(HistoryRecord prev)
              --startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
                --startProcessLocked(String processName,ApplicationInfo info, boolean knownToBeDead, int intentFlags,String hostingType, ComponentName hostingName)
                  --startProcessLocked(ProcessRecord app,String hostingType, String hostingNameStr)
                    在这里启动一个进程用来host这个应用
                    int pid = Process.start("android.app.ActivityThread",
                    mSimpleProcessManagement ? app.processName : null, uid, uid,
                    gids, debugFlags, null);
                   
ActivityManagerService.java
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
  --realStartActivityLocked(HistoryRecord r,ProcessRecord app, boolean andResume, boolean checkConfig)
    --app.thread.scheduleLaunchActivity                                   //scheduleLaunchActivity()@IApplicationThread.java
      --scheduleLaunchActivity()@ActivityThread.java                      //这里实际是ApplicationThreadNative提供的服务
        --handleMessage()@H$ActivityThread.java
          --handleLaunchActivity()@ActivityThread.java
            --Activity performLaunchActivity(ActivityRecord r, Intent customIntent)@ActivityThread.java  //这时真正的Activity对象被构造出来
              --mInstrumentation.newActivity()                            //通过反射构造出Activity对象
              --activity.attach()                                         //初始化Activity,生成一个window对象,设置各种状态等等
              --mInstrumentation.callActivityOnCreate(activity, r.state);  //调用Activity的onCreate()方法
           
              到这里,我们自己写的activity的onCreate()方法已经被系统调用了,接下来依次回调生命周期方法:
              --activity.performStart();
                --mInstrumentation.callActivityOnStart(this);
              --mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
              --mInstrumentation.callActivityOnPostCreate(activity, r.state);
              --mActivities.put(r.token, r);                               //将这个activity入栈
             
            然后就要调用onResume()方法了:
            --handleResumeActivity(IBinder token, boolean clearHide, boolean isForward)
              --performResumeActivity(token, clearHide);
                --r.activity.performResume();
                  --performRestart()@Activity.java;
                    --mInstrumentation.callActivityOnRestart(this);
                    --mInstrumentation.callActivityOnStart(this);
                --mInstrumentation.callActivityOnResume(this);
                onResume()已经调用完毕,一个activity的逻辑处理结束了,但是这时候屏幕上还不会显示任何东西,因为View还没有添加进去
               
               
              --r.window.getDecorView();                                   //开始把DecorView添加进Window
              --wm.addView(decor, l);
           
            至此一个Activity启动结束。

分享到:
评论

相关推荐

    Hook技术activity启动过程中拦截

    在本主题中,我们将深入探讨如何在Activity启动过程中利用Hook技术进行拦截,以及这种技术在Android插件化开发中的应用。 首先,理解Activity的启动过程是至关重要的。在Android中,当一个Activity被启动时,系统会...

    Android应用程序的Activity启动过程简要介绍和学习计划.doc

    7. **异常处理**:学习如何处理Activity启动过程中的异常,例如没有找到匹配的Activity或权限问题。 8. **实践项目**:通过编写小型应用或修改现有项目,实践Activity的启动和管理。 通过以上学习计划,你可以逐步...

    Android应用程序的Activity启动过程简要介绍和学习计划

    Android应用程序的Activity启动过程简要介绍和学习计划

    老罗Activity启动过程时序图

    老罗Activity启动过程文章中,时序图比较模糊看不清,自己重新做了一个

    Android-11-Activity 启动过程分析流程图原件

    Android_11_Activity 启动过程分析流程图原件

    Activity 启动过程源码+分析过程

    理解Activity的启动过程对于优化应用性能、解决兼容性问题以及深入学习Android系统至关重要。本篇文章将详细解析Activity的启动过程源码,并进行深度分析。 1. **Activity启动流程概述** Activity的启动流程主要...

    分析Android Activity的启动过程

     对于Android Activity 的启动过程,我在Android源码中读了好久的源码,以下是我整理出来的Activity启动过程和大家分享下: Activity作为Android的四大组件之一,也是最基本的组件,负责与用户交互的所有功能。...

    Activity启动流程图

    - ContextImpl是Context的一个内部实现类,负责管理应用的上下文环境,它会在Activity启动过程中被使用到,用于创建Window以及设置WindowManager等。 7. Activity的attach方法 - attach方法是Activity生命周期中...

    智能家居系统-Activity的启动和销毁.pptx

    Activity启动过程可以将其分为6个过程: 1. 使用代理模式启动到ActivityManagerService中执行; 2. 创建ActivityRecord到mHistory 记录中; 3. 通过socket 通信到Zgote相关类创建process ; 4. 通过...

    android ActivityManagerService 源码分析----Activity管理

    在 Activity 启动过程中,AMS 还需要处理一些其他的逻辑,例如,检查要启动的 Activity 是否需要权限,是否需要启动新的进程等。这些逻辑都是通过 AMS 中的其他方法来实现的。 ActivityManagerService 是 Android ...

    从application启动activity

    在处理启动Activity的过程中,还需注意以下几点: 1. **权限管理**:如果启动的Activity需要特定权限,记得在AndroidManifest.xml中声明这些权限。 2. **任务栈管理**:通过Intent的FLAG_ACTIVITY_NEW_TASK标志...

    Boot process and Manage of the Activity

    不同的启动情况会导致Activity启动过程出现差异,如锁屏状态与非锁屏状态下的区别,以及应用程序进程是否已经存在等情况。Activity的启动、切换以及管理会受到配置和属性的影响,本文将介绍一些重要和典型的概念,...

    ams暗屏启动activity的4.1和4.0 log

    6. **Log分析**:在4.1main.log和4.0main.log中,我们可以看到AMS处理Activity启动过程的详细日志。这些日志包含了Activity的创建、启动时间、Intent信息、状态变化等关键信息,通过分析这些日志可以帮助开发者理解...

    浅谈android性能优化之启动过程(冷启动和热启动)

    Android 应用程序启动优化之冷启动和热启动详解 一、应用程序启动方式 ...了解 Android 应用程序的启动过程对于优化应用程序的性能非常重要,可以根据应用程序的启动方式和启动过程来进行相应的优化处理。

    Activity_boot_process_analysis

    在Activity启动过程中,系统可能还会调用以下方法来执行具体的操作: - startActivity:启动一个新的Activity。 - startActivityForResult:启动一个新的Activity,并等待其返回结果。 - execStartActivity:执行...

Global site tag (gtag.js) - Google Analytics