Java 从调用活动中提取intent中的可包裹数据需要很长时间
我试图通过Intent传递一个可包裹的数据,但是试图从Intent中的包中提取数据花费了很长时间 这是我的代码 在呼叫活动中-Java 从调用活动中提取intent中的可包裹数据需要很长时间,java,android,android-activity,Java,Android,Android Activity,我试图通过Intent传递一个可包裹的数据,但是试图从Intent中的包中提取数据花费了很长时间 这是我的代码 在呼叫活动中- Parcelable objectTarget = xxx; Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("data", objectTarget); startActivity(intent); @Override protected void onCreate(@N
Parcelable objectTarget = xxx;
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("data", objectTarget);
startActivity(intent);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// a --
Parcelable object = getIntent().getParcelableExtra("data");
// b --
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// a --
Bundle bundle = getIntent().getExtras();
Parcelable passedObject = bundle.getParcelable("data");
// b --
}
在目标活动中-
Parcelable objectTarget = xxx;
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("data", objectTarget);
startActivity(intent);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// a --
Parcelable object = getIntent().getParcelableExtra("data");
// b --
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// a --
Bundle bundle = getIntent().getExtras();
Parcelable passedObject = bundle.getParcelable("data");
// b --
}
令人惊讶的是,a到b过程在一台设备上花费了5000毫秒,在另一台设备上花费了700毫秒,而没有引发TransactionTooLargeException
我使用“GsonUtil.getInstance().toJson(value.getBytes().length;”测量了“objectTarget”的大小打印结果为2273。所以我猜这个物体并没有太大
--
还有,这里有一些我试过的东西
Bundle bundle = new Bundle();
bundle.putParcelable("data", objectTarget);
Parcelable passedObject = bundle.getParcelable("data");
而且不到2毫秒
--
在目标活动中-
Parcelable objectTarget = xxx;
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("data", objectTarget);
startActivity(intent);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// a --
Parcelable object = getIntent().getParcelableExtra("data");
// b --
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// a --
Bundle bundle = getIntent().getExtras();
Parcelable passedObject = bundle.getParcelable("data");
// b --
}
当然,这里的a到b过程花费了大约相同的时间,开销稍高,但我只是想尝试一下
--
当包裹数据被放入一个Intent并通过“startActivty(Intent)”时,似乎需要比预期更长的时间进行编组和解编
我真的束手无策,如果有人能对这个问题有所了解,那就太好了。谢谢。创建一个名为ParcelabelUtil的类
import android.os.Parcel;
import android.os.Parcelable;
public class ParcelableUtil {
public static byte[] marshall(Parcelable parcelable) {
Parcel parcel = Parcel.obtain();
parcelable.writeToParcel(parcel, 0);
byte[] bytes = parcel.marshall();
parcel.recycle();
return bytes;
}
private static Parcel unmarshall(byte[] bytes) {
Parcel parcel = Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0);
return parcel;
}
public static <T> T unmarshall(byte[] bytes, Parcelable.Creator<T> creator) {
Parcel parcel = unmarshall(bytes);
T result = creator.createFromParcel(parcel);
parcel.recycle();
return result;
}
}
在被调用的活动中
byte[] objectBytes = getIntent().getExtras().getByteArray("data"); // get the object byte[]
MyObject object = Parcelable.unmarshall(objectBytes, MyObject.CREATOR); // unmarshall byte[]
创建一个名为ParcelabelUtil的类
import android.os.Parcel;
import android.os.Parcelable;
public class ParcelableUtil {
public static byte[] marshall(Parcelable parcelable) {
Parcel parcel = Parcel.obtain();
parcelable.writeToParcel(parcel, 0);
byte[] bytes = parcel.marshall();
parcel.recycle();
return bytes;
}
private static Parcel unmarshall(byte[] bytes) {
Parcel parcel = Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0);
return parcel;
}
public static <T> T unmarshall(byte[] bytes, Parcelable.Creator<T> creator) {
Parcel parcel = unmarshall(bytes);
T result = creator.createFromParcel(parcel);
parcel.recycle();
return result;
}
}
在被调用的活动中
byte[] objectBytes = getIntent().getExtras().getByteArray("data"); // get the object byte[]
MyObject object = Parcelable.unmarshall(objectBytes, MyObject.CREATOR); // unmarshall byte[]
谢谢你的回答。但是你能详细解释一下为什么通过Intent发送包裹需要很长时间吗?谢谢你的回答。但你能详细说明一下为什么通过Intent发送包裹需要很长时间吗?