studio programacion para herramientas fundamentos desarrollo con avanzado aplicaciones android android-activity android-8.0-oreo android-7.0-nougat

programacion - No se puede reanudar la actividad con java.lang.IllegalArgumentException en la api de Android>=24



manual android studio avanzado (3)

El problema es con tu paquete. Debe encontrar dónde la actividad, el fragmento y la vista guardan el paquete para guardar el estado. Habrá una secuencia incorrecta. p.ej

@Override protected Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); final CharSequence textFromEditText = mTextView.getText(); if (textFromEditText != null) { SavedState savedState = new SavedState(superState); savedState.text = textFromEditText.toString(); return savedState; } return superState; } @Override protected void onRestoreInstanceState(Parcelable state) { if (!(state instanceof SavedState)) { super.onRestoreInstanceState(state); return; } SavedState savedState = (SavedState) state; super.onRestoreInstanceState(savedState.getSuperState()); if (!TextUtils.isEmpty(savedState.text)) { mTextView.setText(savedState.text); } } private static class SavedState extends BaseSavedState { String text; private SavedState(Parcelable superState) { super(superState); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(text); } private SavedState(Parcel source) { super(source); text = source.readString(); } public static final Creator<SavedState> CREATOR = new Creator<SavedState>() { @Override public SavedState createFromParcel(Parcel source) { return new SavedState(source); } @Override public SavedState[] newArray(int size) { return new SavedState[size]; } }; }

así que el problema podría estar en algún lugar de

@Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(text); } private SavedState(Parcel source) { super(source); text = source.readString(); }

cuando la secuencia de la lectura de la fuente del paquete es mala.

Hay un bloqueo en mi aplicación en dispositivos que ejecutan la versión 7.0 , 7.1.1 y 8.0.0 con el siguiente stacktrace:

Fatal Exception: java.lang.RuntimeException: Unable to resume activity {xxx/xxx.views.activities.HomeActivity}: java.lang.IllegalArgumentException at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3788) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3828) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2991) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) Caused by java.lang.IllegalArgumentException at android.os.Parcel.readException(Parcel.java:1697) at android.os.Parcel.readException(Parcel.java:1646) at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:6600) at android.app.Activity.isTopOfTask(Activity.java:6142) at android.app.Activity.onResume(Activity.java:1331) at android.support.v4.app.FragmentActivity.onResume(FragmentActivity.java:485) at xxx.views.activities.BaseActivity.onResume(BaseActivity.java:50) at xxx.views.activities.HomeActivity.onResume(HomeActivity.java:364) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1277) at android.app.Activity.performResume(Activity.java:7058) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3765) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3828) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2991) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

Mi código en las líneas informadas es simplemente:

// HomeActivity class @Override public void onResume() { mPresenter.onResume(); super.onResume(); renderView(); } // BaseActivity class @Override protected void onResume() { super.onResume(); // some other code }

Investigué un poco sobre esto y encontré esta question similar.

Dado que el IllegalArgumentException no contiene ningún mensaje de detalle, voy a intentar poner registros adicionales como se sugiere here .

Mientras tanto, agradezco cualquier ayuda!


También tuve el mismo problema en mi proyecto. Mientras investigaba, descubrí que también podría ser posible si está intentando acceder a cualquier variable o método static desde el método onResume() de su Actividad.


catch (Exception e) { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( "Unable to resume activity " + r.intent.getComponent().toShortString() + ": " + e.toString(), e); } }

es una excepción encadenada, así que inspeccione e.getCause () stacktrace -> hasta que la causa sea nula

si no lo encuentra, mire el método en el hilo de actividad que invoca el bloque try:

try { r.activity.onStateNotSaved(); r.activity.mFragments.noteStateNotSaved(); if (r.pendingIntents != null) { deliverNewIntents(r, r.pendingIntents); r.pendingIntents = null; } if (r.pendingResults != null) { deliverResults(r, r.pendingResults); r.pendingResults = null; } r.activity.performResume(); // If there is a pending local relaunch that was requested // when the activity was // paused, it will put the activity into paused state // when it finally happens. // Since the activity resumed before being relaunched, // we don''t want that to happen, // so we need to clear the request to relaunch paused. for (int i = mRelaunchingActivities.size() - 1; i >= 0; i--) { final ActivityClientRecord relaunching = mRelaunchingActivities.get(i); if (relaunching.token == r.token && relaunching.onlyLocalRequest && relaunching.startsNotResumed) { relaunching.startsNotResumed = false; } } }

deberás buscar el motivo en:

  • Activity.onStateNotSaved ();
  • Activity.mFragments.noteStateNotSaved ();
  • Activity.performResume ();
  • y Activity.onNewIntent final ()

Caused by java.lang.IllegalArgumentException at android.os.Parcel.readException(Parcel.java:1697) at android.os.Parcel.readException(Parcel.java:1646) at android.app.ActivityManagerProxy.isTopOfTask (ActivityManagerNative.java:6600) at android.app.Activity.isTopOfTask(Activity.java:6142) at android.app.Activity.onResume(Activity.java:1331)

y la mejor opción es una respuesta para este problema:

rjava.lang.IllegalArgumentException en startActivity (intento, animación de paquete)