我写了一个MyIntent类,它扩展了Intent。
然后我使用MyIntent的实例来调用startActivity(MyIntent)。

MyIntent i=new MyIntent(this,NewActivity.class);

构造函数是:
public MyIntent(Context context,Class<?> cls){
super(context,cls);
putExtra(var1,var2);
//other codes
((Activity)context).startActivity(this);
}

但是,当我在新的启动 Activity 中调用getIntent()时,getIntent()的返回值是一个Intent,而不是MyIntent,即
getIntent() instanceof Intent // true;
getIntent() instanceof MyIntent // false;

当我尝试(MyIntent)getIntent()时,系统抛出ClassCastException。

最佳答案

您无法做到这一点,因为Intent实现ParcelableCloneable接口(interface),所以当intent对象在进程之间移动时会重新创建它。因此,它将是一个不同的实例。

source code of ActivityManagerProxy, startActivity
您会注意到, Intent 不会通过引用传递,而是被写入到Parcel中以创建新对象。因此,将不再引用先前 Activity 中创建的Intent对象。

10-08 14:55