Android应用程序启动过程源代码分析(3).pdf
上传人:sy****28 上传时间:2024-09-14 格式:PDF 页数:13 大小:97KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

Android应用程序启动过程源代码分析(3).pdf

Android应用程序启动过程源代码分析(3).pdf

预览

免费试读已结束,剩余 3 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android应用程序启动过程源代码分析(3)这个函数定义在frameworks/base/core/java/android/app/ActivityThread.java文件中:publicfinalclassActivityThread{......privatefinalvoidhandlePauseActivity(IBindertoken,booleanfinished,booleanuserLeaving,intconfigChanges){ActivityClientRecordr=mActivities.get(token);if(r!=null){//Slog.v(TAG,"userLeaving="+userLeaving+"handlingpauseof"+r);if(userLeaving){performUserLeavingActivity(r);}r.activity.mConfigChangeFlags|=configChanges;Bundlestate=performPauseActivity(token,finished,true);//Makesureanypendingwritesarenowcommitted.QueuedWork.waitToFinish();//Telltheactivitymanagerwehavepaused.try{ActivityManagerNative.getDefault().activityPaused(token,state);}catch(RemoteExceptionex){}}}......}函数首先将Binder引用token转换成ActivityRecord的远程接口ActivityClientRecord,然后做了三个事情:1.如果userLeaving为true,则通过调用performUserLeavingActivity函数来调用Activity.onUserLeaveHint通知Activity,用户要离开它了;2.调用performPauseActivity函数来调用Activity.onPause函数,我们知道,在Activity的生命周期中,当它要让位于其它的Activity时,系统就会调用它的onPause函数;3.它通知ActivityManagerService,这个Activity已经进入Paused状态了,ActivityManagerService现在可以完成未竟的事情,即启动MainActivity了Step17.ActivityManagerProxy.activityPaused这个函数定义在frameworks/base/core/java/android/app/ActivityManagerNative.java文件中:classActivityManagerProxyimplementsIActivityManager{......publicvoidactivityPaused(IBindertoken,Bundlestate)throwsRemoteException{Parceldata=Parcel.obtain();Parcelreply=Parcel.obtain();data.writeInterfaceToken(IActivityManager.descriptor);data.writeStrongBinder(token);data.writeBundle(state);mRemote.transact(ACTIVITY_PAUSED_TRANSACTION,data,reply,0);reply.readException();data.recycle();reply.recycle();}......}这里通过Binder进程间通信机制就进入到ActivityManagerService.activityPaused函数中去了。Step18.ActivityManagerService.activityPaused这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中:publicfinalclassActivityManagerServiceextendsActivityManagerNativeimplementsWatchdog.Monitor,BatteryStatsImpl.Batter