![](/img/trans.png)
[英]How to pass ArrayList of Objects from one to another activity using Intent in android?
[英]What are the problems in using Intent to pass objects from one activity to another
更新:請參閱下面的“已接受”解決方案
我觀察到的一種方法是意圖。 沒有其他適當的推薦方法。
對我來說,當您要通過網絡傳輸數據或需要一段時間后檢索對象時,需要序列化。 僅在某些特定情況下使用。 但是在這里,我看到的是將意圖與序列化一起使用,以簡單地共享/傳遞一些數據。
根據規范,意圖將充當活動之間的粘合劑。 我還假設我們可以將指令/少量數據傳遞給下一個活動。
我的問題更具體地說是關於使用意圖傳遞數據/大數據。 考慮到使用意圖時需要序列化。 這是個好方法嗎?
注意:請注意,由於開發了獨立於android的框架,因此在此特定情況下將無法使用Parcelable。
Intents
只能傳遞小數據包。 如果您需要傳遞一些大的東西,請將其保存到存儲或數據庫中,請通過Intent
傳遞一個uri,然后在接收Activity
讀取數據。
故意傳遞大數據將導致嚴重的問題,甚至導致您終止應用程序進程(這對用戶來說非常煩人)。
組件之間傳遞的數據范圍限制為1MB 。 請記住,這並不意味着您可以安全地傳遞1MB的數據,因為一次可能要處理多個Intents
。
您也可以考慮使用事件總線庫,例如greenrobot EventBus ,但是它們需要大量的訓練,因為它們基本上可以使您將所有內容傳遞給任何地方。
我使用的一種方法是對數據對象使用Singleton Holder類。 並在流程的各個組件之間進行訪問。 偽代碼在下面。 可能有編譯錯誤。 另外請注意,您將需要清除機制並添加一種方法來保持數據新鮮。
class DataSet{
DataSet(String data){
this.data = data;
}
public String data;
}
class Holder{
private Holder(){
}
private static Holder holder = null;
DataSet object = null;
private Holder static getInstance(){
if(null == holder){
holder = new Holder();
}
return holder
}
public void setData(DataSet arg){
object = arg;
}
public DataSet getData(){
return object;
}
}
class Activity A implements View.OnClickListener{
public void onClick(){
Holder.getInstance().setData(new DataSet("this is a big object"));
// At this point the data has been set and has process scope.
startActivity(new Intent(A.this, B.class))
}
}
class Activity B{
DataSet data;
public void onCreate(){
data = Holder.getInstance().getData(); // This point the data is accessible to Class B
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.