У меня есть интерфейс Callback
класс, как показано ниже,
public interface Callback extends Serializable {
void onResponse(int responseCode);
}
Я использую вышеупомянутый интерфейс для синтаксического анализа в качестве объекта обратного вызова params, как показано ниже
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;
}
}
}
};
Затем я используювыше callback
объект для отправки в мою библиотеку
FaceDetectFragment.newInstance(callback, mode);
В этом FaceDetectFragment
классе я манипулирую параметром, как показано ниже,
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;
}
Затем я использую выше установленные аргументы вonCreate
метод, как показано ниже,
if (getArguments() != null) {
clientCallback = (Callback) getArguments().getSerializable(KEY_USER_CALLBACK);
biometricMode = getArguments().getInt(KEY_BIOMETRIC_MODE);
}
Тогда здесь я буду использовать объект обратного вызова несколько раз, как показано ниже,
clientCallback.onResponse(ResponseCode.FACE_NOT_DETECT);
Все функции работают нормально, но когда яПриостановив приложение, сгенерирует исключение RuntimeException, исключение будет показано ниже:
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)
Насколько я знаю, когда я приостанавливаю приложение, приложение пытается сохранить текущее состояние приложения, сохраняя при этомсостояние, не удалось идентифицировать сериализованный обратный вызов для сохранения в текущем состоянии.Что я должен сделать, чтобы обработать это исключение?
UPDATE : Когда мы рассматриваем жизненный цикл фрагмента, когда запускается состояние onPause
, текущее состояние сохраняется в стеке, затеммой объект сериализации снова будет добавлен в связку к main thread
.Это ошибка времени происходит, как я проанализировал
Заранее спасибо за ваше драгоценное время!