我有一個持有對Context的引用的類,並且我計劃序列化這個類的一個對象。如您所知,Context
對象不能被序列化,所以我將其標記爲transient
。如何在反序列化過程中獲取Android上下文的引用?
現在,我面臨的問題是如何恢復Context
參考的狀態?我需要在反序列化過程中以某種方式傳遞對應用程序當前上下文的引用。有沒有辦法在反序列化過程中這樣做,還是必須先恢復對象,然後通過單獨的方法或其他方法重新初始化變量transient
。
我有一個持有對Context的引用的類,並且我計劃序列化這個類的一個對象。如您所知,Context
對象不能被序列化,所以我將其標記爲transient
。如何在反序列化過程中獲取Android上下文的引用?
現在,我面臨的問題是如何恢復Context
參考的狀態?我需要在反序列化過程中以某種方式傳遞對應用程序當前上下文的引用。有沒有辦法在反序列化過程中這樣做,還是必須先恢復對象,然後通過單獨的方法或其他方法重新初始化變量transient
。
你應該看看覆蓋readObject()方法。在readObject()中,您可以將Context變量初始化爲您認爲合適的任何值。
e.g
class Test implements Serializable{
private int a;
private string b;
transient Context c;
private void readObject(ObjectInputStream in) throws IOException{
in.defaultReadObject();
//now initialize transient fields
c=ContextFactory.getContext();
}
}
感謝您的建議。不幸的是,我所說的Context是android.content.Context,不能通過靜態方法來檢索。 – WindsurferOak
@WindsurferOak我的觀點是,在readResolve方法中,可以將上下文初始化爲合適的值。 – ManojGumber
我明白你的觀點。重新閱讀我的問題後,我可以看到我不清楚。除了覆蓋readObject/writeObject之外,我正在尋找一種方法來獲取Context的句柄。一種方式,正如你所建議的,是通過一種靜態方法,最終如何完成它,但是如何做到這一點呢? – WindsurferOak
什麼是你想序列化,需要上下文恢復? – momo
這是我聲明的類的一個對象,它包含對系統服務的引用,如NotificationManager,WifiManager,Audiomanager等。 – WindsurferOak