源码探探之StartActivity(一)

源码基于API 26

startActivity()上车

@Override
public void startActivity(Intent intent) {
    this.startActivity(intent, null);
}

没什么好说的

//启动一个activity不需要返回值
//如果context之外调用startActivity(),需要给intent添加{@link Intent#FLAG_ACTIVITY_NEW_TASK}
//@param options 附加的选项指示如果启动activity
@Override
public void startActivity(Intent intent, @Nullable Bundle options) {
    if (options != null) {
        startActivityForResult(intent, -1, options);
    } else {
        //可重写该方法兼容应用需求
        startActivityForResult(intent, -1);
    }
}

可重写该方法,参考FragmentActivity

//If requestCode >= 0, this code will be returned in onActivityResult() when the activity exits.
public void startActivityForResult(@RequiresPermission Intent intent, int requestCode) {
    startActivityForResult(intent, requestCode, null);
}

最终执行该方法

//启动一个activity在finish()会返回一个结果在onActivityResult()中
//如果在onCreate()/onResume()方法中调用该方法,window不显示界面直到该方法返回结果
public void startActivityForResult(@RequiresPermission Intent intent, int requestCode,
        @Nullable Bundle options) {
    //父activity一般为空
    if (mParent == null) {
        //通过ActivityOptions帮助类生成一个bundle,指示该如何启动该activity
        options = transferSpringboardActivityOptions(options);
        //Instrumentation基类启动Activity
        Instrumentation.ActivityResult ar =
            mInstrumentation.execStartActivity(
                this, mMainThread.getApplicationThread(), mToken, this,
                intent, requestCode, options);
        //返回结果
        if (ar != null) {
            //最终会执行Activity的onActivityResult()
            mMainThread.sendActivityResult(
                mToken, mEmbeddedID, requestCode, ar.getResultCode(),
                ar.getResultData());
        }
        if (requestCode >= 0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值