intent 传递对象 得到的对象与传入的对象不同? 200分。

2024-12-03 03:35:40
推荐回答(5个)
回答1:

这个是intent的传递机孝郑制决定的。
在android中,只有实现了serializable/parcelable的对象才可以通过intent传递,因为intent是可以在不同进程间传递的,故传递的对象必须不能指向某一个jvm的内存区,所以需要通过序列化生成一个新的对象。
也就是说,你通过intent传递的对象,只是一个当前对隐毕象巧携颂的深度克隆,和原对象数据相同,但无论在stack还是heap中指向的都是不同的地址。
因为在序列化对象的时候需要进行深度克隆,所以对于较大的对象要考虑通过其他方式共享(比如静态变量)。
此外,这样还可以一定程度上避免内存泄漏的问题。

回答2:

现在我觉得你的这个 空迟 intent  有问题, 按照你说的,明显在  BActivity 在 态滑intent 

中取出的 a 是一个默认的。

如果  intent   在  AActivity和  BActivity  中斗闭李是同一个实例,是不会有问题的。

看下边的例子。


public class ActivityTest {
public static void main(String[] args) {
Intent intent = new Intent();
AActivity a = new AActivity(intent);
BActivity b = new BActivity(intent);
a.start();
b.start();
}
}
class A {
int value = 1;
}
class AActivity {
A a = null;
private Intent intent = null;
public AActivity(Intent intent) {
a = new A();
this.intent = intent;
System.out.println(a);
}
public void start() {
a.value = 2;
intent.a = a;
}
}
class BActivity {
A aa = null;
private Intent intent = null;
public BActivity(Intent intent) {
this.intent = intent;
}
public void start() {
aa = intent.a;
System.out.println(aa.value);
System.out.println(aa);
}
}
class Intent {
A a = null;
}


输出结果:

A@69b332

2

A@69b332

回答3:

,设置a的属性Value=2

回答4:

在我戚枯觉得你的这个 intent 有高闷洞问罩陵题, 按照你说的,明显在 BActivity 在 intent

回答5:

里获取对象a赋值给A