I have interface Callback
class as shown below,
public interface Callback extends Serializable {
void onResponse(int responseCode);
}
I use the above interface to parse as params callback object, like below
private Callback callback = new Callback() {
@Override
public void onResponse(int responseCode) {
switch (responseCode) {
case ResponseCode.FACE_NOT_DETECT: {
notifyText.setText("Face not detected");
break;
}
case ResponseCode.FACE_TOO_FAR: {
notifyText.setText("Face too far, Please get closer to the camera");
break;
}
case ResponseCode.FACE_BLINK_TO_CAPTURE: {
notifyText.setText("Blink once to capture your face image");
break;
}
}
}
};
Then I use the above callback
object to send to my library
FaceDetectFragment.newInstance(callback, mode);
In this FaceDetectFragment
class, I manipulate the param as below,
public static FaceDetectFragment newInstance(Callback callback, int mode) {
if (faceInstance != null) {
return faceInstance;
}
faceInstance = new FaceDetectFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(KEY_USER_CALLBACK, callback);
bundle.putInt(KEY_BIOMETRIC_MODE, mode);
faceInstance.setArguments(bundle);
return faceInstance;
}
Then I use above setted arguments in at onCreate
method as shown below,
if (getArguments() != null) {
clientCallback = (Callback) getArguments().getSerializable(KEY_USER_CALLBACK);
biometricMode = getArguments().getInt(KEY_BIOMETRIC_MODE);
}
Then in here I'll use callback object several times as below,
clientCallback.onResponse(ResponseCode.FACE_NOT_DETECT);
All the functionlaties are working fine, but when I paused the app, will throw an RuntimeException, the exception is shown as below,
Process: com.ej.face_demo_android, PID: 29679
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.ej.face_demo_android.FaceDetectActivity$2)
at android.os.Parcel.writeSerializable(Parcel.java:1536)
at android.os.Parcel.writeValue(Parcel.java:1484)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:733)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1133)
at android.os.Parcel.writeBundle(Parcel.java:773)
at android.support.v4.app.FragmentState.writeToParcel(FragmentState.java:124)
at android.os.Parcel.writeTypedArray(Parcel.java:1316)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:639)
at android.os.Parcel.writeParcelable(Parcel.java:1505)
at android.os.Parcel.writeValue(Parcel.java:1411)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:733)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1133)
at android.os.Parcel.writeBundle(Parcel.java:773)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4146)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4148)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.io.NotSerializableException: com.ej.face_demo_android.FaceDetectActivity
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at android.os.Parcel.writeSerializable(Parcel.java:1531)
at android.os.Parcel.writeValue(Parcel.java:1484)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:733)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1133)
at android.os.Parcel.writeBundle(Parcel.java:773)
at android.support.v4.app.FragmentState.writeToParcel(FragmentState.java:124)
at android.os.Parcel.writeTypedArray(Parcel.java:1316)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:639)
at android.os.Parcel.writeParcelable(Parcel.java:1505)
at android.os.Parcel.writeValue(Parcel.java:1411)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:733)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1133)
at android.os.Parcel.writeBundle(Parcel.java:773)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4146)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4148)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
As my knowledge when I am pausing the app, the app trying to save the current state of the app, while saving the state, couldn't identify serialized call back to save in current state. What should I do to handle this exception?
UPDATE:
When we consider about the fragment life cycle, when onPause
state is triggered, the current state wi saving in the stack, Then my serialize object will wrap into to the bundle again by main thread
. This is the time error occurs as I analyzed
Thanks in advance for your valuable time!