这个是intent的传递机孝郑制决定的。
在android中,只有实现了serializable/parcelable的对象才可以通过intent传递,因为intent是可以在不同进程间传递的,故传递的对象必须不能指向某一个jvm的内存区,所以需要通过序列化生成一个新的对象。
也就是说,你通过intent传递的对象,只是一个当前对隐毕象巧携颂的深度克隆,和原对象数据相同,但无论在stack还是heap中指向的都是不同的地址。
因为在序列化对象的时候需要进行深度克隆,所以对于较大的对象要考虑通过其他方式共享(比如静态变量)。
此外,这样还可以一定程度上避免内存泄漏的问题。
现在我觉得你的这个 空迟 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
,设置a的属性Value=2
在我戚枯觉得你的这个 intent 有高闷洞问罩陵题, 按照你说的,明显在 BActivity 在 intent
里获取对象a赋值给A