2011-9-27 22:08:16

本文详细解析了Android中ActivityManagerProxy的startActivity方法和ActivityManagerService的startActivity函数,深入探讨了Activity启动过程中的关键参数及其作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


2011-9-27 22:08:16

 

         Step 5. ActivityManagerProxy.startActivity

         这个函数定义在frameworks/base/core/java/android/app/ActivityManagerNative.java文件中:


class ActivityManagerProxy implements IActivityManager
{

 ......

 public int startActivity(IApplicationThread caller, Intent intent,
   String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
   IBinder resultTo, String resultWho,
   int requestCode, boolean onlyIfNeeded,
   boolean debug) throws RemoteException {
  Parcel data = Parcel.obtain();
  Parcel reply = Parcel.obtain();
  data.writeInterfaceToken(IActivityManager.descriptor);
  data.writeStrongBinder(caller != null ? caller.asBinder() : null);
  intent.writeToParcel(data, 0);
  data.writeString(resolvedType);
  data.writeTypedArray(grantedUriPermissions, 0);
  data.writeInt(grantedMode);
  data.writeStrongBinder(resultTo);
  data.writeString(resultWho);
  data.writeInt(requestCode);
  data.writeInt(onlyIfNeeded ? 1 : 0);
  data.writeInt(debug ? 1 : 0);
  mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
  reply.readException();
  int result = reply.readInt();
  reply.recycle();
  data.recycle();
  return result;
 }

 ......

}        这里的参数比较多,我们先整理一下。从上面的调用可以知道,这里的参数resolvedType、grantedUriPermissions和resultWho均为null;

参数caller为ApplicationThread类型的Binder实体;参数resultTo为一个Binder实体的远程接口,我们先不关注它;
参数grantedMode为0,我们也先不关注它;参数requestCode为-1;参数onlyIfNeeded和debug均空false。

        Step 6. ActivityManagerService.startActivity

        上一步Step 5通过Binder驱动程序就进入到ActivityManagerService的startActivity函数来了,
       
        它定义在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中:

public final class ActivityManagerService extends ActivityManagerNative
  implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {

 ......

 public final int startActivity(IApplicationThread caller,
   Intent intent, String resolvedType, Uri[] grantedUriPermissions,
   int grantedMode, IBinder resultTo,
   String resultWho, int requestCode, boolean onlyIfNeeded,
   boolean debug) {
  return mMainStack.startActivityMayWait(caller, intent, resolvedType,
   grantedUriPermissions, grantedMode, resultTo, resultWho,
   requestCode, onlyIfNeeded, debug, null, null);
 }


 ......

}        这里只是简单地将操作转发给成员变量mMainStack的startActivityMayWait函数,这里的mMainStack的类型为ActivityStack。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值