act启动流程:
第一部分:开始请求执行启动Activity
MyActivity.startActivity()
Activity.startActivity()
Activity.startActivityForResult()
Instrumentation.execStartActivty()
ActivityManagerNative.getDefault().startActivity()
1:ActivityManagerNative.getDefault()代码如下:
private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
protected IActivityManager create() {
IBinder b = ServiceManager.getService("activity");//获取 AMS 对象
if (false) {
Log.v("ActivityManager", "default service binder = " + b);
}
IActivityManager am = asInterface(b);
if (false) {
Log.v("ActivityManager", "default service = " + am);
}
return am;
}
};
2:asInterface(b)代码如下:
static public IActivityManager asInterface(IBinder obj) {
if (obj == null) {
return null;
}
IActivityManager in =
(IActivityManager)obj.queryLocalInterface(descriptor);
if (in != null) {
return in;
}
return new ActivityManagerProxy(obj);
}
3:
ActivityManagerNative.getDefault().startActivity()
ActivityManagerProxy.startActivity()
mRemote(AMS).transact()
AMS.onTranct()
super(ActivityManagerNative).onTranct()
(AMS).startActivity()
(AMS).startActivityAsUser()
4:
在系统进程一侧:
(1):最上层的有IActivityManager的接口定义,图中只列出了少数成员函数作为示意;
(2):往下一层,有两个接口的实现,其中一个ActivityManagerNative作为服务端的“桩(Stub)”,其主要职责就是对远程传递过来的数据进行”反序列化(unparcel)”;
(3):另一个ActivityManagerProxy作为服务的“代理(Proxy)”,运行在客户端,其主要职责就是将数据进行“序列化(parcel)”,再传递给远程的“桩(Stub)”;
(4):再下一层,就是接口的具体业务实现AMS了,对“桩(Stub)”做了继承扩展
在应用进程一侧:
(1):最上层的有IApplicationThread的接口定义;
(2):往下一层,有两个接口的实现,其中一个ApplicationThreadNative,ApplcationThreadProxy;
(3):具体业务的实现类是ApplicationThread是ActivityThread的一个内部类,
ApplicationThread负责响应系统进程发起的请求,这些请求大部分都是需要调度在应用进程的主线程执行,
而ActivityThread是应用进程的主线程,通过Handle往主线程抛消息,
ApplicationThread就轻松将具体执行任务的工作转交给了主线程
第二部分:ActivityManagerService接收启动Activity的请求
ActivityManagerService.startActivity()
ActvityiManagerService.startActivityAsUser()
ActivityStackSupervisor.startActivityMayWait()
ActivityStackSupervisor.startActivityLocked()
ActivityStackSupervisor.startActivityUncheckedLocked()
ActivityStack.startActivityLocked()
ActivityStackSupervisor.resumeTopActivitiesLocked()
ActivityStack.resumeTopActivityLocked()
ActivityStackSupervisor.resumeTopActivityInnerLocked()
ActivityStack.startPausingLocked()
第三部分:执行栈顶Activity的onPause方法
ActivityStack.startPausingLocked()
ActivityRecord.app.thread.schedulePauseActivity()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage();
ActivityThread.H.handleMessage()
ActivityThread.handlePauseActivity()
ActivityThread.performPauseActivity()
Instrumentation.callActivityOnPause()
Activity.performPause()
Activity.onPause()
ActivityManagerNative.getDefault().activityPaused(token) (通知系统进程顶部的Activity已经处于暂停状态)
ActivityManagerService.activityPaused()
ActivityStack.activityPausedLocked()
ActivityStack.completePauseLocked()
ActivityStack.resumeTopActivitiesLocked()
ActivityStack.resumeTopActivityLocked()
ActivityStack.resumeTopActivityInnerLocked()
ActivityStack.startSpecificActivityLocked()
1:关于:ActivityRecord.app.thread.schedulePauseActivity()
ActivityRecord.ProcessRecord.IApplicationThread.schedulePauseActivity()
IApplicationThread thread = ApplicationThreadNative.asInterface(data.readStrongBinder())
ApplicationThreadProxy.schedulePauseActivity()
mRemote(ApplicationThread).transact()
ApplicationThread.onTranct()
ApplicationThreadNative.onTranct()
ApplicationThread.schedulePauseActivity()
第四部分:启动Activity所属的应用进程
ActivityManagerService.startProcessLocked()
Process.start()
ActivityThread.main()
ActivityThread.attach()
ActivityManagerNative.getDefault().attachApplication()
ActivityManagerService.attachApplication()
IApplicationThread.bindApplication()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage();
ActivityThread.H.handleMessage()
ActivityThread.handleBindApplication()
1:ActivityThread.main()中代码如下:
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
Looper.loop();
2:ActivityThread.attach中代码如下:
final IActivityManager mgr = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);
AMS.attachApplication()
3:AMS.attachApplication代码如下:
IApplicationThread.bindApplication()
ApplicationThread.bindApplication()
4:在IApplicationThread.bindApplication()中:
ActivityThread.mH.sendMessage()
ActivityThread.mH.handleMessage(BIND_APPLICATION);
ActivityThread.handleBindApplication()
if (data.appInfo.targetSdkVersion <= android.os.Build.VERSION_CODES.HONEYCOMB_MR1) {
AsyncTask.setDefaultExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
mInstrumentation = (Instrumentation)
cl.loadClass(data.instrumentationName.getClassName()).newInstance();
app = mActivityThread.mInstrumentation.newApplication(
cl, appClass, appContext);
Instrumentation.callApplicationOnCreate(app);
Application.onCreate();
第五部分:执行启动Acitivity
ActivityStackSupervisor.attachApplicationLocked()
ActivityStackSupervisor.realStartActivityLocked()
IApplicationThread.scheduleLauncherActivity()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage()
ActivityThread.H.handleMessage()
ActivityThread.handleLauncherActivity()
ActivityThread.performLauncherActivity()
Instrumentation.callActivityOnCreate()
Activity.onCreate()
ActivityThread.handleResumeActivity()
ActivityThread.performResumeActivity()
Activity.performResume()
Instrumentation.callActivityOnResume()
Activity.onResume()
ActivityManagerNative.getDefault().activityResumed(token)
1:在ActivityThread.handleLauncherActivity中
Activity a = performLaunchActivity(r, customIntent);
handleResumeActivity(r.token, false, r.isForward);
2:在ActivityThread.performLauncherActivity()中:
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
Instrumentation.callActivityOnCreate(activity, r.state);
Activity.onCreate()
activity.performStart();
Instrumentation.callActivityOnStart()
Activity.onStart()
mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
第六部分:栈顶Activity执行onStop方法
Looper.myQueue().addIdleHandler(new Idler())
Idler.queueIdle()
ActivityManagerNative.getDefault().activityIdle()
ActivityManagerService.activityIdle()
ActivityStackSupervisor.activityIdleInternalLocked()
ActivityStack.stopActivityLocked()
IApplicationThread.scheduleStopActivity()
ActivityThread.scheduleStopActivity()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage()
ActivityThread.H.handleMessage()
ActivityThread.handleStopActivity()
ActivityThread.performStopActivityInner()
ActivityThread.callCallActivityOnSaveInstanceState()
Instrumentation.callActivityOnSaveInstanceState()
Activity.performSaveInstanceState()
Activity.onSaveInstanceState()
Activity.performStop()
Instrumentation.callActivityOnStop()
Activity.onStop()
第一部分:开始请求执行启动Activity
MyActivity.startActivity()
Activity.startActivity()
Activity.startActivityForResult()
Instrumentation.execStartActivty()
ActivityManagerNative.getDefault().startActivity()
1:ActivityManagerNative.getDefault()代码如下:
private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
protected IActivityManager create() {
IBinder b = ServiceManager.getService("activity");//获取 AMS 对象
if (false) {
Log.v("ActivityManager", "default service binder = " + b);
}
IActivityManager am = asInterface(b);
if (false) {
Log.v("ActivityManager", "default service = " + am);
}
return am;
}
};
2:asInterface(b)代码如下:
static public IActivityManager asInterface(IBinder obj) {
if (obj == null) {
return null;
}
IActivityManager in =
(IActivityManager)obj.queryLocalInterface(descriptor);
if (in != null) {
return in;
}
return new ActivityManagerProxy(obj);
}
3:
ActivityManagerNative.getDefault().startActivity()
ActivityManagerProxy.startActivity()
mRemote(AMS).transact()
AMS.onTranct()
super(ActivityManagerNative).onTranct()
(AMS).startActivity()
(AMS).startActivityAsUser()
4:
在系统进程一侧:
(1):最上层的有IActivityManager的接口定义,图中只列出了少数成员函数作为示意;
(2):往下一层,有两个接口的实现,其中一个ActivityManagerNative作为服务端的“桩(Stub)”,其主要职责就是对远程传递过来的数据进行”反序列化(unparcel)”;
(3):另一个ActivityManagerProxy作为服务的“代理(Proxy)”,运行在客户端,其主要职责就是将数据进行“序列化(parcel)”,再传递给远程的“桩(Stub)”;
(4):再下一层,就是接口的具体业务实现AMS了,对“桩(Stub)”做了继承扩展
在应用进程一侧:
(1):最上层的有IApplicationThread的接口定义;
(2):往下一层,有两个接口的实现,其中一个ApplicationThreadNative,ApplcationThreadProxy;
(3):具体业务的实现类是ApplicationThread是ActivityThread的一个内部类,
ApplicationThread负责响应系统进程发起的请求,这些请求大部分都是需要调度在应用进程的主线程执行,
而ActivityThread是应用进程的主线程,通过Handle往主线程抛消息,
ApplicationThread就轻松将具体执行任务的工作转交给了主线程
第二部分:ActivityManagerService接收启动Activity的请求
ActivityManagerService.startActivity()
ActvityiManagerService.startActivityAsUser()
ActivityStackSupervisor.startActivityMayWait()
ActivityStackSupervisor.startActivityLocked()
ActivityStackSupervisor.startActivityUncheckedLocked()
ActivityStack.startActivityLocked()
ActivityStackSupervisor.resumeTopActivitiesLocked()
ActivityStack.resumeTopActivityLocked()
ActivityStackSupervisor.resumeTopActivityInnerLocked()
ActivityStack.startPausingLocked()
第三部分:执行栈顶Activity的onPause方法
ActivityStack.startPausingLocked()
ActivityRecord.app.thread.schedulePauseActivity()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage();
ActivityThread.H.handleMessage()
ActivityThread.handlePauseActivity()
ActivityThread.performPauseActivity()
Instrumentation.callActivityOnPause()
Activity.performPause()
Activity.onPause()
ActivityManagerNative.getDefault().activityPaused(token) (通知系统进程顶部的Activity已经处于暂停状态)
ActivityManagerService.activityPaused()
ActivityStack.activityPausedLocked()
ActivityStack.completePauseLocked()
ActivityStack.resumeTopActivitiesLocked()
ActivityStack.resumeTopActivityLocked()
ActivityStack.resumeTopActivityInnerLocked()
ActivityStack.startSpecificActivityLocked()
1:关于:ActivityRecord.app.thread.schedulePauseActivity()
ActivityRecord.ProcessRecord.IApplicationThread.schedulePauseActivity()
IApplicationThread thread = ApplicationThreadNative.asInterface(data.readStrongBinder())
ApplicationThreadProxy.schedulePauseActivity()
mRemote(ApplicationThread).transact()
ApplicationThread.onTranct()
ApplicationThreadNative.onTranct()
ApplicationThread.schedulePauseActivity()
第四部分:启动Activity所属的应用进程
ActivityManagerService.startProcessLocked()
Process.start()
ActivityThread.main()
ActivityThread.attach()
ActivityManagerNative.getDefault().attachApplication()
ActivityManagerService.attachApplication()
IApplicationThread.bindApplication()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage();
ActivityThread.H.handleMessage()
ActivityThread.handleBindApplication()
1:ActivityThread.main()中代码如下:
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
Looper.loop();
2:ActivityThread.attach中代码如下:
final IActivityManager mgr = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);
AMS.attachApplication()
3:AMS.attachApplication代码如下:
IApplicationThread.bindApplication()
ApplicationThread.bindApplication()
4:在IApplicationThread.bindApplication()中:
ActivityThread.mH.sendMessage()
ActivityThread.mH.handleMessage(BIND_APPLICATION);
ActivityThread.handleBindApplication()
if (data.appInfo.targetSdkVersion <= android.os.Build.VERSION_CODES.HONEYCOMB_MR1) {
AsyncTask.setDefaultExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
mInstrumentation = (Instrumentation)
cl.loadClass(data.instrumentationName.getClassName()).newInstance();
app = mActivityThread.mInstrumentation.newApplication(
cl, appClass, appContext);
Instrumentation.callApplicationOnCreate(app);
Application.onCreate();
第五部分:执行启动Acitivity
ActivityStackSupervisor.attachApplicationLocked()
ActivityStackSupervisor.realStartActivityLocked()
IApplicationThread.scheduleLauncherActivity()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage()
ActivityThread.H.handleMessage()
ActivityThread.handleLauncherActivity()
ActivityThread.performLauncherActivity()
Instrumentation.callActivityOnCreate()
Activity.onCreate()
ActivityThread.handleResumeActivity()
ActivityThread.performResumeActivity()
Activity.performResume()
Instrumentation.callActivityOnResume()
Activity.onResume()
ActivityManagerNative.getDefault().activityResumed(token)
1:在ActivityThread.handleLauncherActivity中
Activity a = performLaunchActivity(r, customIntent);
handleResumeActivity(r.token, false, r.isForward);
2:在ActivityThread.performLauncherActivity()中:
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
Instrumentation.callActivityOnCreate(activity, r.state);
Activity.onCreate()
activity.performStart();
Instrumentation.callActivityOnStart()
Activity.onStart()
mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
第六部分:栈顶Activity执行onStop方法
Looper.myQueue().addIdleHandler(new Idler())
Idler.queueIdle()
ActivityManagerNative.getDefault().activityIdle()
ActivityManagerService.activityIdle()
ActivityStackSupervisor.activityIdleInternalLocked()
ActivityStack.stopActivityLocked()
IApplicationThread.scheduleStopActivity()
ActivityThread.scheduleStopActivity()
ActivityThread.sendMessage()
ActivityThread.H.sendMessage()
ActivityThread.H.handleMessage()
ActivityThread.handleStopActivity()
ActivityThread.performStopActivityInner()
ActivityThread.callCallActivityOnSaveInstanceState()
Instrumentation.callActivityOnSaveInstanceState()
Activity.performSaveInstanceState()
Activity.onSaveInstanceState()
Activity.performStop()
Instrumentation.callActivityOnStop()
Activity.onStop()