Android-Intent与Bundle在传值上的区别

Intent与Bundle在activity之间传值的区别

Intent的putExtra()方法有:

    public Intent putExtra(String name, boolean value);
    public Intent putExtra(String name, byte value);
    public Intent putExtra(String name, char value);
    public Intent putExtra(String name, short value);
    public Intent putExtra(String name, int value);
    public Intent putExtra(String name, long value);
    public Intent putExtra(String name, float value);
    public Intent putExtra(String name, double value);
    public Intent putExtra(String name, String value);
    public Intent putExtra(String name, CharSequence value);
    public Intent putExtra(String name, Parcelable value);
    public Intent putExtra(String name, Parcelable[] value);
    ...</span>


查看putExtra()方法中的源码,方法里面还是使用了Bundle对象,mExtras变量是在Intent类中定义的;Intent内部还是用bundle来实现数据传递的,只是在外面封装了一层。

    public Intent putExtra(String name, String value) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putString(name, value);
        return this;
    }</span>

Bundle类的作用

  Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。

Bundle的内部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值。简单地说,Bundle就是一个封装好的包,专门用于导入Intent传值的包。

    public void putBoolean(String key, boolean value);
    public void putByte(String key, byte value);
    public void putChar(String key, char value);
    ...

Intent在传值时没有Bundle的情况:

发送数据的Activity

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edit);
button = (Button) findViewById(R.id.button1);
String txt = editText.getText().toString();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String string = editText.getText().toString();
Intent intent = new Intent(MainActivity.this, main.class);
intent.putExtra("name", string);
startActivity(intent);
}
});
}


接收数据的Activity

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.txt2);
Intent intent = getIntent();
String string = intent.getStringExtra("name");
textView.setText(string);
}


使用Bundle 进行传值:

发送数据的Activity

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edit);
button = (Button) findViewById(R.id.button1);
String txt = editText.getText().toString();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String string = editText.getText().toString();
Intent intent = new Intent(MainActivity.this, main.class);
Bundle bundle = new Bundle();
bundle.putString("name", string);
intent.putExtras(bundle);
startActivity(intent);
}
});
}


接收方的Activity

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.txt2);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String string = bundle.getString("name");
textView.setText(string);
}


Bundle在存取数据是比较灵活的,而Intent在存取数据的种类很少且没有指定数据类型;

想对数据进行比较灵活的操作如批量操作的话就用bundle;
Bundle是可以对对象进行操作的,而Intent不可以。Bundle相对于Intent比较偏下层,比Intent接口更多,更灵活,但Bundle仍需要借助Intent才能在Activity之间传递。

概括一下,Intent旨在数据传递,bundle旨在存取数据,当然intent也提供一部分数据的存取,但比起bundle就显得很不灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦茶子12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值