以下是我的Parcelable类的示例。如您所见,我想将活动放在Parcel
中,但我怎么能这样做?我查看了Activity
的源代码,它不是Parcelable
也不是Serializable
。
public class MyParcelable implements Parcelable {
private Activity mActivity;
private int mData;
private String mName;
@Override
public void writeToParcel(Parcel out, int flags) {
//out.writeX(mActivity);
out.writeInt(mData);
out.writeString(mName);
}
private MyParcelable(Parcel in) {
//mActivity = in.readX();
mData = in.readInt();
mName = in.readString();
}
public MyParcelable(Activity activity, int data, String name) {
mActivity = activity;
mData = data;
mName = name;
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
@Override
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
@Override
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
}
答案 0 :(得分:0)
您可以将任何内容放入Parcel中,然后将任何内容从Parcel中取出。但是,之后的“任何事情”是否会起作用取决于各种因素。
所有活动实例都与Android的ActivityManager密切合作。定义Activity的大多数方法:startActivity()
,finish()
,restart()
,setContentView()
,getPackage()
委托ActivityManager,ViewManager,PackageManager和其他系统的方法服务。在系统销毁Activity之后,这些方法将无法工作。如果你实例化没有Android的“特殊酱”的Activity类,那些方法也行不通。虽然在技术上可以使用反射或JNI实例化Activity类,但这些实例不起作用。
这就是人们的意思,当他们说Activity是“由Android管理”时:它基本上是由操作系统进程驱动的,如果没有与这些进程的通信就不能存在。幸运的是,Android有办法启动此类通信:Intent
。替换此行:
private Activity mActivity;
与
private Intent mActivity;
在另一方收到活动后,使用parcelized Intent启动活动。当然,如果你需要更多的东西而不仅仅是Intent来使你的Activity成为可用的形状,你必须将这些东西与Intent一起存储在你的Parcelable中。
答案 1 :(得分:0)
将活动放入包裹并不是一个好主意。如果您需要这样做,可能您的代码很糟糕,您需要查看代码以避免此实现。