2017-08-02 43 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

這不是一個好主意,把活動放在包裹上。如果您需要這樣做,可能您的代碼很糟糕,您需要查看代碼以避免此實現。

相關問題