Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从调用活动中提取intent中的可包裹数据需要很长时间_Java_Android_Android Activity - Fatal编程技术网

Java 从调用活动中提取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

我试图通过Intent传递一个可包裹的数据,但是试图从Intent中的包中提取数据花费了很长时间

这是我的代码

在呼叫活动中-

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发送包裹需要很长时间吗?