·¢²¼Ê±¼ä : ÐÇÆÚËÄ ÎÄÕÂAndroid ActivityÔÀí·ÖÎö¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ
Õâ¸öͼ£¬¿ªÊ¼½øÈëµ½Á˹ؼüµÄµØ·½ÁË£¬Í¨¹ýrealStartActivityLocked¿ªÊ¼ÕæÕýºÍÎÒÃÇÒªÆô¶¯µÄactivityÏà¹ØÁË£¬Ç°Ã涼ÊÇһЩ¹ý³¡£¬Í¨¹ýactivityThread½¨Éè»ù´¡»·¾³£» ½Ó×ÅÍùÏ¿´£º
realStartActivityLocked(r, app, andResume, checkConfig)ActivityManagerService.javarealStartActivityLocked(HistoryRecord r,ProcessRecord app, boolean andResume, boolean checkConfig)ActivityManagerService.javamWindowManager.setAppVisibility(r, true);app.thread.scheduleLaunchActivity(new Intent(r.intent), r,System.identityHashCode(r), r.info, r.icicle, results, newIntents, !andResume,isNextTransitionForward());scheduleLaunchActivityApplicationThreadNative.javamRemote.transact(SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION, data, null,IBinder.FLAG_ONEWAY);×ó±ßÕâ·ÊÇÉæ¼°ÏÔʾÏà¹ØµÄ£¬ÒÔºó·ÖÎöͼÐÎϵͳµÄʱºòÔÙ½²ÕâÀïÖ»ÐèÒªÖªµÀËüÔÚÏûÏ¢¶ÓÁÐÀïÃæ·ÅÁËÒ»ÏûÏ¢£¬×îºó»á´¥·¢ÏÔʾÁ÷³Ì£»
ÓÒ±ßÕâ·ÊÇÎÒÃǸú×ٵķ¾¶£¬Í¨¹ýscheduleLaunchActivity¿ªÊ¼´¥·¢activityµÄÆô¶¯£»
ÔÚAndroidµÄ´úÂëÀïÎÒ·¢ÏÖÒ»¸öÌص㣬·²ÊÇ´øscheduleµÄ£¬»ù±¾É϶¼²»»áÖ±½Ó×öÊ£¬Ëü·Òë³ÉÖÐÎľÍÊÇ¡°°²ÅÅ¡±£¬Õâ¸ö°²ÅÅͨ³£¶¼²»ÊÇÁ¢¼´µÄ£¬¶øÊÇ·ÅÈëµ½ÏûÏ¢¶ÓÁÐÀïÃæµÈµ½ÏÂÒ»¸öÑ»·²ÅÄÜ´¦Àí£¬²»ÐŽÓ×Å¿´£º
?Tech, 2010-2-5 Page 17 of 38
onTransactApplicationThreadNative.javacase SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION:scheduleLaunchActivity(intent, b, ident, info, state, ri, pi,notResumed, isForward)queueOrSendMessage(H.LAUNCH_ACTIVITY, r);ÕýÈçÎÒÉÏÃæ˵µÄ£¬ÕâÖÖ´øscheduleµÄ¶¼ÊÇͨ¹ý·¢ËÍÏûÏ¢µ½ÐźŶÓÁÐÀïÃæÍê³ÉµÄ£¬Õâ¸ö¹ý³ÌÎÒÒ²¾ÍÔÚ¸½Â¼¡¾1¡¿ÀïÃæ·ÖÎö¹ý£¬ÕâÀï¾Í²»·ÖÎöÁË£¬Ö»ÐèÒªÖªµÀ£¬ÔÚij¸öÑ»·ÀïÃæ»áµ÷Óà handleMessage(Message msg) À´´¦Àí£¬¶øÇÒÕâ¸öͼµÄÂß¼ÒѾ»Øµ½ÁËactivityThread.javaÕâ¸ö½ø³ÌÁË£¬Ò²¾ÍÊǻص½ÁËÎÒÃÇÒªÆô¶¯µÄactivityµÄ½ø³Ì£¬½Ó×Å¿´£º
public void handleMessage(Message msg) ActivityThread.java case LAUNCH_ACTIVITYActivityRecord r = (ActivityRecord)msg.objr.packageInfo = getPackageInfoNoCheck(r.activityInfo.applicationInfo)handleLaunchActivity(r, null)È¡µÃ´ÓÏûÏ¢ÀïÃæ´«µÝ¹ýÀ´µÄÐÅÏ¢£¬È»ºóÔÙÈ¡µÃ´ËactivityµÄ°üÐÅÏ¢£¬ºóÃæ»áÓõ½£¬±ÈÈçȨÏÞ¼ì²éµÈ£» ×îºóͨ¹ýhandleLaunchActivityÀ´ÕæÕýÆô¶¯ÎÒÃǵÄactivityÁË£»
?Tech, 2010-2-5 Page 18 of 38
5.1.4 OnCreateº¯ÊýµÄµ÷ÓÃ
handleLaunchActivity(r, null)Õâ±ßÊǵ½activity×Ô¼ºµÄ´úÂëÕâ±ßÊÇÏÔʾÁ÷³ÌActivity a = performLaunchActivity(r, customIntent) if (a != null)performLaunchActivity(ActivityRecord r, Intent customIntent)r.createdConfig = new Configuration(mConfiguration)handleResumeActivity(r.token, false, r.isForward)ÕâÀïºÜ¹Ø¼ü£¬´¥·¢ÁËÕû¸öÏÔʾµÄ¹ý³Ì activity = mInstrumentation.newActivity( cl, component.getClassName(), r.intent);mInstrumentation.callActivityOnCreate(activity, r.state)callActivityOnCreateInstrumentation.javaactivity.onCreate(icicle);CreateµÄµ÷ÓÃÁ÷³Ì×îÓұߵķÖÖ§ÊÇResumeµÄÁ÷³Ì£¬ºóÃæ½²£»
ÕâÀïÎÒÃÇ¿´µ½ÁËÎÒÃÇ×îÏë¿´µ½µÄactivity.onCreateº¯Êýµ÷ÓÃÁË£¬Èç¹ûÎÒÃÇ×Ô¼ºÐ´µÄ´úÂ룬ÀïÃæ»áʵÏÖÕâ¸öonCreateº¯Êý£¬×öÎÒÃÇ×Ô¼ºÏë×öµÄÊ£¬µ±È»ÎÒÃǵÄʵÏÖÀïÃæ±ØÐëÒªµ÷Ó㺠super.onCreate£¬ÆäËüµÄÁù¸ö״̬º¯ÊýÒ²Ò»Ñù£¬±ØÐëÒªµ÷Óø¸ÀàµÄͬÃûº¯Êý£»
handleLaunchActivity»¹×öÁËÆäËüµÄһЩÊÂÇ飬 resume£¬ËüµÄÂß¼ÔÚ×îÓұߵķÖÖ§£» ¶øº¯ÊýperformLaunchActivityÕâÀïÖ»»³öÁËonCreate£¬ÆäʵËü»¹»á´¥·¢onStartµÄµ÷Óã»
5.1.5
OnStartµÄµ÷ÓÃ
Ç°Ãæ˵¹ý£¬performLaunchActivityÆäʵ×öÁ˺ܶàÊÂÇ飬¾Í°üÀ¨¶ÔÓÚonStartµÄµ÷Óã¬ÈçÏÂËùʾ£º
?Tech, 2010-2-5 Page 19 of 38
performLaunchActivity(ActivityRecord r, Intent customIntent)mInstrumentation.callActivityOnCreate(activity, r.state)OnCreateµÄµ÷ÓÃÂß¼ if (!r.activity.mFinished) mActivities.put(r.token, r)ÕâÀï°ÑIBinderºÍactivity×öÒ»¸öÁ¬½Óactivity.performStartperformStartActivity.javamCalled = falsemInstrumentation.callActivityOnStart(this)allActivityOnStart(Activity activity)activity.onStartͨ³£Õâ¸öº¯Êý»á±»ÖØÐÂʵÏÖActivity.javamCalled = trueµ±ÖØÐÂʵÏֺ󣬼ǵõ÷ÓÃÕâ¸ö¸¸ÀàµÄͬÃûº¯Êý£¬·ñÔò»áÅ׳öÒì³£×î×ó±ßµÄ·ÖÖ§£¬ÊÇÎÒÃÇÉÏÃæÒѾ˵¹ýµÄonCreateµÄµ÷ÓÃÂß¼£» ÖмäµÄÂß¼¾ÍÊÇÎÒÃǵÄonStartµÄµ÷ÓÃÂß¼£»
ͨ³£¶ÔÓÚonCreate,onStartµÈÆ߸ö״̬µÄº¯Êýµ÷Ó㬶¼×ñÑÕâÑùÒ»ÖÖ·¨Ôò£º
µ÷ÓÃ֮ǰÉèÖÃmCalled=false£¬È»ºóÔÚʵÏֵĺ¯ÊýÀïÃæÉèÖÃmCalled=true,µÈÕâ¸öº¯Êý·µ»ØÒÔºóͨ¹ýÅжÏÕâ¸ömCalledÊÇ·ñΪtrueÀ´Åжϸ¸ÀàµÄͬÃûº¯ÊýÊÇ·ñ»áÒѾ±»µ÷ÓÃÁË£¬ÕâÒ²¾ÍÊÇΪʲôÎÒÃDZØÐëÒªÔÚ×ÓÀàµÄʵÏÖÀïÃæµ÷Óø¸ÀàµÄͬÃû·½·¨µÄÔÒòÖ®Ò»£» ×îÓұߵÄ·¾¶±íʾ°ÑÕâ¸öIBinderºÍÕâ¸öactivityÁ¬½ÓÆðÀ´£¬ÒòΪһ¸öActivityThreadºÜÓпÉÄܹÜÀí×Ŷà¸öactivity£¬ÒÔºó²Å¿ÉÒÔ¸ù¾ÝÕâ¸öIBinderÕÒµ½ÕýÈ·µÄActivity£» ºÃÏÂÃæ¿´¿´onResumeµÄµ÷Ó÷¾¶£»
?Tech, 2010-2-5
Page 20 of 38