RCB*_*RCB 5 android android-intent android-activity
我想将一个自定义Object从一个活动传递给另一个活动,Object包含一个String和一个另一个自定义Object的List,它包含一个字符串数组和一个int数组.我已经阅读了 /sf/answers/149881651/,但后来我找到了这个答案/sf/answers/548959141/.使用Bundle或Parcelable哪个更好?有什么不同?我什么时候应该使用它?
谢谢你的回复,
丹
Parcelable而Bundle不是排他性的概念; 您甚至可以一次在您的应用上进行部署.
[1]术语Parcelable附带Java中的序列化概念(以及其他高级语言,如C#,Python,......).它确保此类的对象(保留在RAM存储Parcelable中)可以保存在文本流中,例如文本或内存(脱机状态),然后可以重建以在运行时(在线状态)在程序中使用.
在Android应用程序中,在2内independent activities(完全运行 - 一个启动,然后其他必须停止):
当前活动将没有指针指向前一个及其成员 - 因为之前的活动已停止并从内存中清除; 这样,为了保持对象的值传递给下一个活动(从中调用Intent),对象需要是parcelable(serializable).
[2]虽然Bundle通常是Android概念,但表示变量或变量组.如果查看较低级别,可以将其视为具有键值对的HashMap.
结论:
Bundle是存储许多具有相关键的对象,它可以保存本机类型中的任何对象,但它不知道如何保存复杂对象(例如包含ArrayList)
Parcelableclass是为了确保它的复杂实例可以serialized和de-serialized运行时一样.该对象可以包含复杂类型,如ArrayList,HashMap,数组或结构,...
[更新] - 示例:
//Class without implementing Parcelable will cause error
//if passing though activities via Intent
public class NoneParcelable
{
private ArrayList<String> nameList = new ArrayList<String>();
public NoneParcelable()
{
nameList.add("abc");
nameList.add("xyz");
}
}
//Parcelable Class's objects can be exchanged
public class GoodParcelable implements Parcelable
{
private ArrayList<String> nameList = new ArrayList<String>();
public GoodParcelable()
{
nameList.add("Can");
nameList.add("be parsed");
}
@Override
public int describeContents()
{
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
// Serialize ArrayList name here
}
}
Run Code Online (Sandbox Code Playgroud)
在源活动中:
NoneParcelable nonePcl = new NoneParcelable();
GoodParcelable goodPcl = new GoodParcelable();
int count = 100;
Intent i = new Intent(...);
i.putExtra("NONE_P",nonePcl);
i.putExtra("GOOD_P",goodPcl);
i.putExtra("COUNT", count);
Run Code Online (Sandbox Code Playgroud)
在目的地活动中:
Intent i = getIntent();
//this is BAD:
NoneParcelable nP = (NoneParcelable)i.getExtra("NONE_P"); //BAD code
//these are OK:
int count = (int)i.getExtra("COUNT");//OK
GoodParcelable myParcelableObject=(GoodParcelable)i.getParcelableExtra("GOOD_P");// OK
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7222 次 |
| 最近记录: |