当前位置: 首页> 科技> 数码 > 重庆政务服务网_济南做企业网站的公司_爱站数据_网站优化 秦皇岛

重庆政务服务网_济南做企业网站的公司_爱站数据_网站优化 秦皇岛

时间:2025/7/10 0:17:54来源:https://blog.csdn.net/yang_niuxxx/article/details/143269891 浏览次数:0次
重庆政务服务网_济南做企业网站的公司_爱站数据_网站优化 秦皇岛

API 33
A进程的Activity起点B进程的BActivity
在这里插入图片描述

  • ProcessA: startActivity
  • ProcessA: android.app.ContextImpl#startActivity()
    • ProcessA: mMainThread.getInstrumentation().execStartActivity
  • ProcessA: android.app.Instrumentation#execStartActivity()
    • ProcessA: ActivityTaskManager.getService().startActivity
  • SystemServer: com.android.server.wm.ActivityTaskManagerService#startActivity
  • SystemServer: com.android.server.wm.ActivityTaskManagerService#startActivityAsUser()
    • SystemServer: getActivityStartController().obtainStarter().execute
  • SystemServer: ActivityStarter.execute
  • SystemServer: com.android.server.wm.ActivityStarter#executeRequest
  • SystemServer: com.android.server.wm.ActivityStarter#startActivityUnchecked
  • SystemServer: com.android.server.wm.ActivityStarter#startActivityInner
  • SystemServer: com.android.server.wm.RootWindowContainer#resumeFocusedTasksTopActivities()
  • SystemServer: com.android.server.wm.Task#resumeTopActivityUncheckedLocked()
  • SystemServer: com.android.server.wm.Task#resumeTopActivityInnerLocked
  • SystemServer: com.android.server.wm.TaskFragment#resumeTopActivity
    • SystemServer: pausing |= startPausing() 开始执行Aactivity的onPause
      • SystemServer: com.android.server.wm.TaskFragment#startPausing()
      • SystemServer: com.android.server.wm.TaskFragment#schedulePauseActivity
      • SystemServer: mAtmService.getLifecycleManager().scheduleTransaction调用到
      • SystemServer: com.android.server.wm.ClientLifecycleManager#scheduleTransaction(ClientTransaction)
      • SystemServer: ClientTransaction.schedule();
      • SystemServer: mClient.scheduleTransaction(this) mClient为IApplicationThread。即A进程的ibinder
      • Process A:ActivityThread.this.scheduleTransaction
      • Process A:ActivityThread的父类 android.app.ClientTransactionHandler#scheduleTransaction
      • Process A:mTransactionExecutor.execute(transaction);最终调用到对应XXXActivityItem的execute方法
      • Process A: android.app.servertransaction.PauseActivityItem#execute
      • Process A:android.app.ActivityThread#handlePauseActivity
      • Process A:android.app.ActivityThread#performPauseActivity()
      • Process A:android.app.ActivityThread#performPauseActivityIfNeeded
      • Process A:mInstrumentation.callActivityOnPause
      • Process A:android.app.Activity#performPause
      • Process A:android.app.Activity.onPause !!!
  • SystemServer: mAtmService.startProcessAsync(APP不存在执行创建进程)
  • SystemServer: com.android.server.wm.ActivityTaskManagerService#startProcessAsync
  • SystemServer: ActivityManagerInternal::startProcess
  • SystemServer: AMS.LocalService.startProcess
  • SystemServer: com.android.server.am.ActivityManagerService#startProcessLocked
  • SystemServer: com.android.server.am.ProcessList#startProcessLocked()
    • SystemServer: Process.ProcessStartResult startResult = startProcess
  • SystemServer: com.android.server.am.ProcessList#startProcess
    • SystemServer: startResult = Process.start
  • SystemServer: android.os.Process#start
    • SystemServer: ZYGOTE_PROCESS.start
  • SystemServer: android.os.ZygoteProcess#start
    • SystemServer: startViaZygote
  • SystemServer: android.os.ZygoteProcess#startViaZygote
  • SystemServer: android.os.ZygoteProcess#zygoteSendArgsAndGetResult
  • SystemServer: android.os.ZygoteProcess#attemptUsapSendArgsAndGetResult
    • SystemServer: usapWriter.flush();//发送消息到zygote进程的socket中
  • Zygote: ZygoteInit中一直有个zygoteServer.runSelectLoop在循环等待消息!
  • Zygote: com.android.internal.os.ZygoteServer#runSelectLoop
  • Zygote: pollReturnValue = Os.poll(pollFDs, pollTimeoutMs);之前一直阻塞,此时有消息了。往下执行
  • Zygote: ZygoteConnection connection = peers.get(pollIndex);//pollIndex>0,则代表通过socket接收来自对端的数据,并执行相应操作
  • Zygote: final Runnable command = connection.processOneCommand(this);// !!!进行进程的处理:创建进程
  • Zygote: com.android.internal.os.ZygoteConnection#processCommand
    • Zygote: Zygote.forkAndSpecialize
    • Zygote: com.android.internal.os.Zygote#forkAndSpecialize
    • Zygote: nativeForkAndSpecialize//native去fork子进程
    • Zygote: com_android_internal_os_Zygote_nativeForkAndSpecialize > com_android_internal_os_Zygote.cpp
      • Zygote: pid_t pid = ForkCommon(env, false, fds_to_close, fds_to_ignore, true);//真正fork
    • ProcessB: if (pid == 0) handleChildProc
      • ProcessB: com.android.internal.os.ZygoteInit.java #zygoteInit
      • ProcessB: AndroidRuntime.cpp com.android.internal.os.ZygoteInit#nativeZygoteInit
        • ProcessB: gCurRuntime->onZygoteInit();>AndroidRuntime.cpp
        • ProcessB: onZygoteInit>app_main.cpp
        • ProcessB: ProcessState::self openBinder。初始化新进程的binder
      • ProcessB: com.android.internal.os.RuntimeInit#applicationInit
        • ProcessB: 通过findStaticMain返回一个封装了ActivityThread.main方法的runnable
  • ProcessB: com.android.internal.os.ZygoteInit#main > caller.run();执行runnable
  • ProcessB: 进入到activityThread.main
  • ProcessB: thread.attach(false, startSeq);
  • ProcessB: mgr.attachApplication(mAppThread, startSeq);//把应用的binder 传给ams
  • SystemServer: com.android.server.am.ActivityManagerService#attachApplicationLocked
    • //mProcessesReady这个变量在AMS的 systemReady 中被赋值为true,所以这里的normalMode也为true
      boolean normalMode = mProcessesReady || isAllowedWhileBooting(app.info);
    • SystemServer: thread.bindApplication
      • ProcessB: ActivityThread.bindApplication>sendMsg
      • ProcessB: ActivityThread.handleBindApplication
      • ProcessB: Application app = data.info.makeApplicationInner(data.restrictedBackupMode, null);
      • ProcessB: android.app.LoadedApk#makeApplicationInner()
      • ProcessB: //通过反射创建application,此处第二个参数为null,表示instrumentation为null。
        • ProcessB: android.app.Instrumentation.newApplication()//pathclassloader问题
          • ProcessB: android.app.Application#attach
          • ProcessB: android.content.ContextWrapper.attachBaseContext//app第一个生命周期
          • ProcessB: mLoadedApk = ContextImpl.getImpl(context).mPackageInfo;//设置mLoadApk
        • ProcessB: if (instrumentation != null) {instrumentation.callApplicationOnCreate(app);}
        • ProcessB: // 所以这里不会执行。oncreate方法在ActivityThread里面调用
      • ProcessB: installContentProviders(app, data.providers);//初始化provider
      • ProcessB: mInstrumentation.onCreate(data.instrumentationArgs);//调用onCeate生命周期。//app第二个生命周期
      • ProcessB: //所以provider的oncreate在application的oncreate之前
    • SystemServer: app.makeActive(thread, mProcessStats);//把ProcessB的binder即applicationThread保存下来
    • SystemServer: updateLruProcessLocked(app, false, null);//把ProcessB的ibinder保存到ProcessList中
    • SystemServer: //ams 里有个变量 processList里有个变量变量ArrayList(ams就间接持有了process的binder)
    • SystemServer: //上面说到,这里normalMode为true,去真正启动Activity
    • SystemServer: didSomething = mAtmInternal.attachApplication(app.getWindowProcessController());
      • SystemServer: 调用到com.android.server.wm.ActivityTaskManagerService.LocalService#attachApplication
      • SystemServer: mRootWindowContainer.attachApplication(wpc)
      • SystemServer: mAttachApplicationHelper.process(app);
      • SystemServer: com.android.server.wm.RootWindowContainer#ensureActivitiesVisible()
      • SystemServer: com.android.server.wm.RootWindowContainer#ensureActivitiesVisible()
      • SystemServer: com.android.server.wm.DisplayContent#ensureActivitiesVisible
      • SystemServer: rootTask.ensureActivitiesVisible(starting, configChanges, preserveWindows, notifyClients);
      • SystemServer: com.android.server.wm.Task#ensureActivitiesVisible()
      • SystemServer: task.updateActivityVisibilities(starting, configChanges, preserveWindows, notifyClients);
      • SystemServer: com.android.server.wm.TaskFragment#updateActivityVisibilities
      • SystemServer: mEnsureActivitiesVisibleHelper.process(starting, configChanges, preserveWindows, notifyClients);
      • SystemServer: com.android.server.wm.EnsureActivitiesVisibleHelper#process
      • SystemServer: setActivityVisibilityState(child.asActivityRecord(), starting, resumeTopActivity);
      • SystemServer: makeVisibleAndRestartIfNeeded(mStarting, mConfigChanges, isTop, resumeTopActivity && isTop, r);
      • SystemServer: mTaskFragment.mTaskSupervisor.startSpecificActivity(r, andResume, true /* checkConfig */)//重要函数
      • SystemServer: com.android.server.wm.ActivityTaskSupervisor#startSpecificActivity
      • SystemServer: com.android.server.wm.ActivityTaskSupervisor#realStartActivityLocked
      • SystemServer: clientTransaction.addCallback(LaunchActivityItem.obtain())//这里是LaunchActivityItem!!
      • SystemServer: mService.getLifecycleManager().scheduleTransaction(clientTransaction);
      • SystemServer: transaction.schedule();
      • SystemServer: android.app.servertransaction.ClientTransaction#schedule > mClient.scheduleTransaction(this);
      • ProcessB: android.app.ActivityThread.ApplicationThread#scheduleTransaction
      • ProcessB: ActivityThread.this.scheduleTransaction(transaction);
      • ProcessB: ActivityThread的父类android.app.ClientTransactionHandler执行scheduleTransaction
      • ProcessB: mTransactionExecutor.execute(transaction);
      • ProcessB: android.app.servertransaction.TransactionExecutor#execute
      • ProcessB: executeCallbacks(transaction);
        • ProcessB: final List callbacks = transaction.getCallbacks();
        • ProcessB: final ClientTransactionItem item = callbacks.get(i);
        • ProcessB: item.execute(mTransactionHandler, token, mPendingActions);
        • ProcessB: item为LaunchActivityItem 所以!!执行
        • ProcessB: android.app.servertransaction.LaunchActivityItem#execute
        • ProcessB: client.handleLaunchActivity(r, pendingActions, null /* customIntent */);
        • ProcessB: android.app.ActivityThread#handleLaunchActivity
        • ProcessB: android.app.ActivityThread#performLaunchActivity
        • ProcessB: mInstrumentation.callActivityOnCreate
        • ProcessB: activity.performCreate(icicle, persistentState);
        • ProcessB: android.app.Activity#performCreate()
        • ProcessB: onCreate(icicle);//执行ProcessB Activity的第一个生命周期在这里插入图片描述
关键字:重庆政务服务网_济南做企业网站的公司_爱站数据_网站优化 秦皇岛

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: