| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 
 | ActivityThread.java
 public static void main(String[] args) {
 ...
 ActivityThread thread = new ActivityThread();
 thread.attach(false, startSeq);
 
 ...
 }
 
 private void attach(boolean system, long startSeq) {
 sCurrentActivityThread = this;
 mSystemThread = system;
 if (!system) {
 android.ddm.DdmHandleAppName.setAppName("<pre-initialized>",
 UserHandle.myUserId());
 RuntimeInit.setApplicationObject(mAppThread.asBinder());
 final IActivityManager mgr = ActivityManager.getService();
 try {
 mgr.attachApplication(mAppThread, startSeq);
 } catch (RemoteException ex) {
 throw ex.rethrowFromSystemServer();
 }
 
 ....
 }
 }
 
 
 
 @Override
 public final void attachApplication(IApplicationThread thread, long startSeq) {
 synchronized (this) {
 int callingPid = Binder.getCallingPid();
 final int callingUid = Binder.getCallingUid();
 final long origId = Binder.clearCallingIdentity();
 attachApplicationLocked(thread, callingPid, callingUid, startSeq);
 Binder.restoreCallingIdentity(origId);
 }
 }
 
 
 private final boolean attachApplicationLocked(IApplicationThread thread,
 int pid, int callingUid, long startSeq) {
 
 ....
 if (app.isolatedEntryPoint != null) {
 
 
 thread.runIsolatedEntryPoint(app.isolatedEntryPoint, app.isolatedEntryPointArgs);
 } else if (instr2 != null) {
 
 thread.bindApplication(processName, appInfo, providers,
 instr2.mClass,
 profilerInfo, instr2.mArguments,
 instr2.mWatcher,
 instr2.mUiAutomationConnection, testMode,
 mBinderTransactionTrackingEnabled, enableTrackAllocation,
 isRestrictedBackupMode || !normalMode, app.isPersistent(),
 new Configuration(app.getWindowProcessController().getConfiguration()),
 app.compat, getCommonServicesLocked(app.isolated),
 mCoreSettingsObserver.getCoreSettingsLocked(),
 buildSerial, autofillOptions, contentCaptureOptions);
 } else {
 thread.bindApplication(processName, appInfo, providers, null, profilerInfo,
 null, null, null, testMode,
 mBinderTransactionTrackingEnabled, enableTrackAllocation,
 isRestrictedBackupMode || !normalMode, app.isPersistent(),
 new Configuration(app.getWindowProcessController().getConfiguration()),
 app.compat, getCommonServicesLocked(app.isolated),
 mCoreSettingsObserver.getCoreSettingsLocked(),
 buildSerial, autofillOptions, contentCaptureOptions);
 }
 
 ...
 
 }
 
 }
 
 
 |