Unable to resume activity with java.lang.IllegalArgumentException on Android api >=24
catch (Exception e) { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( "Unable to resume activity " + r.intent.getComponent().toShortString() + ": " + e.toString(), e); } }
it's a chained exeption so inspect e.getCause() stacktrace -> till cause will be null
if you'll not find it look at the method in activity thread which invokes try block:
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; } }}
you'll need to search for reason in:
- Activity.onStateNotSaved();
- Activity.mFragments.noteStateNotSaved();
- Activity.performResume();
- and final Activity.onNewIntent()
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)
and best shot it's an answer for this issue:
rjava.lang.IllegalArgumentException on startActivity(intent,bundle animantion)
Problem is with you parcel. You need to find where activity, fragment, view is saving parcel to save state. There will be wrong sequence. e.g.
@Overrideprotected 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;}@Overrideprotected 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]; } };}
so the problem could be somwhere in
@Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(text); } private SavedState(Parcel source) { super(source); text = source.readString(); }
when the sequance of Parcel source reading are bad.
I had also the same issue in my project. While researching I found that it might also be possible if you are trying to access any static
variables or methods from your Activity's onResume()
method.