一人一猫旅行记之Intent传递数据原理

安卓提供了Intent机制来实现应用间的通信,可以在Activity之间、Service、BroadCast中传递数据。提起Intent,我们最熟悉的可能就是在启动Activity的时候携带数据,使用非常简单:

Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("param1","我是参数1");
startActivity(intent);

在新的Activity,也就是Activity中获取数据也是非常的简单:

String param1 = getIntent().getStringExtra("param1");

我们可以看到在传值的时候,调用了Intent的putExtra方法,我们查看Intent的源码,发现Intent中定义了许多的putExtra方法,以咱们的上面的调用为例,实际上是调用了如下的方法:

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

从上面的代码我们可以明白,在Intent中定义了一个Bundle类型的变量mExtras,当调用Intent的putExtra时,会根据第二个参数类型的不同,调用Bundle的对应方法。我们跑到Bundle会惊喜的发现没有putString方法,所以只能到它的父类BaseBundle中寻找,结果如下:

ArrayMap<String, Object> mMap = null;
<-省略部分代码->
public void putString(@Nullable String key, @Nullable String value) {
        unparcel();
        mMap.put(key, value);
    }

我们接着看看unparcel这个方法

synchronized void unparcel() {
        synchronized (this) {
            f
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值