intent传递一个对象(不是int,long那些基类型),是传递的引用地址,还是new出了一个新的对象传过去的?
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
羽战 2016-12-12 09:33最佳回答 专家已采纳根据源码分析,传递的是一个引用,就拿paceable类型的对象来说:
(1)存储数据的时候Bundle中的源码:
第一步:
public Intent putExtra(String name, Parcelable value) {
if (mExtras == null) {
mExtras = new Bundle();
}
》》重点看这句mExtras.putParcelable(name, value);
return this;
}第二步 /** * Inserts a Parcelable value into the mapping of this Bundle, replacing * any existing value for the given key. Either key or value may be null. * * @param key a String, or null * @param value a Parcelable object, or null */ public void putParcelable(@Nullable String key, @Nullable Parcelable value) { unparcel(); 》》重点看这句 mMap.put(key, value); mFlags &= ~FLAG_HAS_FDS_KNOWN; } 放入一个mMap中,而mMap的数据类型是 ArrayMap<K, V> ArrayMap中的 @Override public V put(K key, V value)方法中仅仅是赋值, mArray[index] = value; 所以在放的时候是一个引用 (2) 在取的时候也没有创建 */ @Nullable public <T extends Parcelable> T getParcelable(@Nullable String key) { unparcel(); 》》重点看这句 Object o = mMap.get(key); //是Bundle中的源码,直接从map中取出然后返回 if (o == null) { return null; } try { return (T) o; } catch (ClassCastException e) { typeWarning(key, o, "Parcelable", e); return null; } } 综上所述,传递的是引用
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
报告相同问题?
提交
相关推荐 更多相似问题
- 2016-12-12 08:27回答 1 已采纳 根据源码分析,传递的是一个引用,就拿paceable类型的对象来说: (1)存储数据的时候Bundle中的源码: 第一步: public Intent putExtra(String
- 2016-03-12 02:08回答 1 已采纳 需要的,不然b里面的数据是传递不过去的
- 2022-04-24 23:43回答 2 已采纳 mainActivity按钮打开SignupActivty的onClick()里面应该是startActivityForResult(intent, 1)。我写成了startActivity(inte
- 2021-01-20 10:07本文实例讲述了Android Activity中使用Intent实现页面跳转与参数传递的方法。分享给大家供大家参考,具体如下: 新建一个FirstAvtivity.java package com.zhuguangwei; import android.app.Activity; import ...
- 2021-01-04 07:38Android Intent发送广播消息 Intent的另一种用途是发送广播消息,应用程序和Android系统都可以使用Intent发送广播消息,广播消息的内容是可以与应用程序密切相关的数据信息,也可以是Android的系统信息,例如网络...
- 2020-11-08 13:02LyCat_00的博客 Android中Intent 实现数据传递的方式有多种,可以传递基本的数据类型的数据,这是最简单的,也可以通过序列化数据传递复杂的对象数据…这里只写其中的方式,还有其他方式没有全部写出来,拿前面自己写的小案例"改造"测试...
- 2015-12-08 07:22回答 2 已采纳 intent内部就是用bundle存储的
- 2017-09-20 07:50回答 2 已采纳 1,首先是机型问题导致打开系统相机,自己的界面被系统干掉,导致回调不成功,这在小米2s,小米3,或者一些性能低的手机必先此问题,我给出的方案是直接自己写一个拍照界面,避免版本兼容问题发的发生,可以看下
- 2022-04-29 14:14回答 1 已采纳 ShowActivity 你这个activity添加到AndroidManifest.xml了吗? <activity android:name=".ShowActivity " />
- 2021-02-02 09:14_彼岸雨敲窗_的博客 可以说Intent在Android中用途比较广泛,我们还可以通过Intent在跳转至下一个界面或者启动另一个组件时携带一些数据进行传递到下一个界面或者组件已达到传值的效果。不过在通常通过Intent传值都是传递一些某些具体...
- 2021-03-16 20:27摘要:Java源码,Android源码,Activity,Android源码 Android Intent_Component使用方法源码,Android Intent主要用于Android应用跳转和传递数据,把不同的Activity连接起来,二者似乎有着千丝万缕的联系,本例就是...
- 2020-02-22 15:41有意识的呼吸的博客 Android提供了一个Application类,每当程序启动的时候就会自动将这个类初始化。 定制一个自己的Application类,以便于管理程序内一些全局的状态信息,比如全局Context。 MyApplication.java public class My...
- 2015-09-01 15:25回答 3 已采纳 首先,尽量不要用try{}catch去捕捉能用判断规避的异常,那样会影响效率,每次出现异常,虚拟机要抓错误调用堆栈。所以,最好的方式是通过判断去规避。 按你的思路,可以先判断getIntent.ge
- 2018-02-27 06:38回答 6 已采纳 把"Intent.ACTION_DIAL"换成Intent.ACTION_DIAL。
- 2016-02-19 08:37回答 3 已采纳 intent是邮递员,bundle是信封。邮递员可以用信封来传递信息,也可以凭自己(内置的bundle)来传递信息。
- 2017-05-31 13:47阿紫_PP的博客 下面介绍两种通过Intent传递对象的方法。 1、实现Serializable接口 2、实现Parcelable接口 为什么要将对象序列化? 1、永久性保存对象,保存对象的字节序列到本地文件中; 2、用过序列...
- 2021-03-18 02:35一个Android Bundle类的操作实例,new一个Bundle对象,将Bundle对象assign给Intent,调用Activity2,并将要传递的数据传入,加载activity2.xml,得Intent中的Bundle对象,取得Bundle对象中的数据,以findViewById()取得...
- 2020-04-09 11:17Android开发基础知识入门第4章 Intent和BroadCastRecevier4.1 Intent和Intent-filter配置4.2 BroadCastReceiverAndroid开发基础知识入门第4章 Intent和BroadCastRecevier4.1 Intent和intent-filter配置 Intent使用...
- 2016-08-26 03:13回答 3 已采纳 这个异常是说,parcel中含有Ibinder对象,因此Parcel中的数据不能被简单的序列化成字节流。 这是由Parcel的设计和实现决定的。 总的来说就是:使用Parcel.mashall把对
- 2022-04-05 11:04端木翠花的博客 1、Activity之间使用 Intent 的 putExtra() 方法传递数据。 2、putExtra() 方法包含两个参数,第一个参数(name)表示传递的数据名称,第二个参数(value)表示传递的数据信息。 3、如果想要获取该数据,可以通过 ...
- 没有解决我的问题, 去提问