如何使用带Bundle可选参数的startActivity方法并在目标Activity获取参数
startActivity(Intent intent, Bundle options) 用法说明
基础定位
这个方法的第二个参数options的设计初衷是承载Activity启动时的系统级配置,比如自定义启动动画、共享元素过渡效果、任务栈启动规则等,并不是专门用来传递业务层自定义数据的,你也可以根据需要往里面塞入自定义参数传递到目标Activity。
启动端传参示例
// 构造要启动的目标Activity的Intent Intent intent = new Intent(this, TargetActivity.class); // 构造Activity启动配置,这里以自定义启动动画为例 ActivityOptions activityOptions = ActivityOptions.makeCustomAnimation( this, R.anim.slide_in_right, // 进入动画 R.anim.slide_out_left // 退出动画 ); // 拿到配置对应的Bundle Bundle optionsBundle = activityOptions.toBundle(); // 往options里塞入自定义业务参数 optionsBundle.putString("custom_key", "我是通过options传递的参数"); optionsBundle.putInt("custom_num", 100); // 调用带options参数的启动方法 startActivity(intent, optionsBundle);
目标Activity取数方式
不需要从Intent的extras中取,直接在目标Activity的onCreate生命周期中调用系统方法获取即可:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 获取启动时传入的options Bundle Bundle options = getActivityOptions(); if (options != null) { // 读取自定义参数 String customStr = options.getString("custom_key"); int customNum = options.getInt("custom_num"); // 后续业务逻辑处理 } }
注意事项
getActivityOptions()方法是Android 12(API level 31)才新增的系统API,如果你的应用需要兼容更低版本,建议还是把业务参数放到Intent的extras中传递,options仅用来处理启动配置即可。- 如果你只是用
options配置系统自带的启动效果(比如动画、共享元素),不需要读取自定义参数,那么目标Activity不需要做任何额外处理,系统会自动应用你配置的启动规则。
内容的提问来源于stack exchange,提问作者user2533355
相关产品推荐
相关产品推荐

