2017-08-02 51 views
0

下面是我的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]; 
     } 
    }; 
} 
+1

将“活动”放在包裹中需要什么? –

+3

不,它也没有多大意义 – Selvin

+1

你最想做的事是发送活动类,你可以发送它的名字作为一个字符串。活动本身不是“只是一个类”,它是一个在屏幕上显示内容的更大系统的一部分,它本身甚至不包含重建自己所需的所有内容。 – etan

回答

0

可以任何东西包裹和采取什么去包裹。但是,这种“任何事情”是否会在事后取决于各种因素。

所有Activity实例都与Android的ActivityManager密切配合。大部分方法将Activity:startActivity(),finish(),restart(),setContentView(),getPackage()定义为ActivityManager,ViewManager,PackageManager和其他系统服务的方法。在系统销毁活动后,这些方法将不起作用。如果你没有使用Android的“特殊酱”来实例化Activity类,那么这些方法也不起作用。虽然技术上可以使用反射或JNI来实例化一个Activity类,但这些简单的实例是行不通的。

这就是人们说活动是“由Android管理”的意思:它基本上是由OS进程驱动的,如果没有与这些进程的通信就不能存在。幸运的是,Android有一种启动此类通信的方式:Intent。替换此行:

private Activity mActivity; 

private Intent mActivity; 

,并使用parcelized意向,一旦你收到它在另一边,开始活动。当然,如果你需要比Intent更多的东西来让你的活动变成可用的形状,你将不得不将这些东西与Intent一起存储在你的Parcelable中。

0

这不是一个好主意,把活动放在包裹上。如果您需要这样做,可能您的代码很糟糕,您需要查看代码以避免此实现。

相关问题