Aktivität mit java.lang.IllegalArgumentException auf Android-API >=24 kann nicht fortgesetzt werden

Lesezeit: 5 Minuten

Benutzer-Avatar
Jiyeh

Es gibt einen Absturz in meiner App auf Geräten, auf denen die Version ausgeführt wird 7.0, 7.1.1 und 8.0.0 mit folgendem 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)

Mein Code in den gemeldeten Zeilen ist einfach:

// HomeActivity class
@Override
public void onResume() {
    mPresenter.onResume();
    super.onResume();

    renderView();
}

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

Ich habe etwas darüber gegraben und diese ähnliche Frage gefunden.

Seit der IllegalArgumentException thrown keine detaillierte Nachricht enthält, werde ich versuchen, zusätzliche Protokolle einzufügen, wie hier vorgeschlagen.

Bitte schätzen Sie in der Zwischenzeit jede Hilfe!

  • super.onResume sollte als erstes in Ihrem onResume-Methodenaufruf aufgerufen werden.

    – JoxTraex

    2. Januar 2018 um 3:11 Uhr

  • @JoxTraex onResume ist das Erste in der onResume-Methode. Aber es behebt es nicht. Ich stehe auch vor demselben Problem in meinem Projekt.

    – Ani

    4. Januar 2018 um 5:59 Uhr

  • Haben Sie Android L 5.1.x getestet?

    – JoxTraex

    4. Januar 2018 um 6:56 Uhr

  • Dasselbe hier auf Android 7 und 8. Haben Sie eine Lösung gefunden?

    – Zhanbolat Raimbekov

    13. Juni 2018 um 20:26 Uhr

  • Ich habe das gleiche Problem, hat jemand andere Lösungen?

    – Adriana C.

    24. Oktober 2019 um 13:14 Uhr

Benutzer-Avatar
ceph3us

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

Es ist eine verkettete Ausnahme, also überprüfen Sie den Stacktrace von e.getCause () -> bis die Ursache null ist

Wenn Sie es nicht finden, sehen Sie sich die Methode im Aktivitäts-Thread an, die den try-Block aufruft:

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;
    }
 }
}

Sie müssen nach dem Grund suchen in:

  • Activity.onStateNotSaved();
  • Activity.mFragments.noteStateNotSaved();
  • Activity.performResume();
  • und letzte 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)

und am besten ist es eine Antwort auf dieses Problem:

rjava.lang.IllegalArgumentException bei startActivity(intent,bundle animation)

Das Problem liegt bei Ihrem Paket. Sie müssen herausfinden, wo Aktivität, Fragment, Ansicht das Paket speichern, um den Zustand zu speichern. Es wird eine falsche Reihenfolge geben. z.B

@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];
        }
    };
}

also könnte das problem irgendwo liegen

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeString(text);
    }

    private SavedState(Parcel source) {
        super(source);
        text = source.readString();
    }

wenn die Reihenfolge der Paketquelllesung schlecht ist.

  • Das Problem liegt bei onResume, nicht bei onRestoreInstanceState

    – Lungenentzündung

    16. Mai 2019 um 9:43 Uhr

  • Ich habe ein ähnliches Problem, kennt ihr andere Lösungen?

    – Adriana C.

    24. Oktober 2019 um 13:20 Uhr

  • Welche Art von Problem ?

    – Vytautas Berankis

    25. Oktober 2019 um 18:13 Uhr

Benutzer-Avatar
Aja Mehta

Ich hatte auch das gleiche Problem in meinem Projekt. Bei der Recherche habe ich festgestellt, dass es auch möglich sein könnte, wenn Sie versuchen, darauf zuzugreifen static Variablen oder Methoden aus Ihren Aktivitäten onResume() Methode.

  • Können Sie bitte erklären, wie der Zugriff erfolgt static Variable oder Methode in onResume() kann dieses Problem verursachen?

    – Darshna Desai

    28. Juni 2019 um 6:31 Uhr


  • Ich habe deutlich erwähnt, dass ich während der Recherche diese Lösung gefunden habe. Ich habe auch erwähnt, dass dieses Problem möglicherweise auch dann auftritt, wenn Sie versuchen, auf statische Variablen in der Methode onResume() zuzugreifen.

    – Ajay Mehta

    21. August 2019 um 9:01 Uhr

  • Voodoo ist keine Antwort.

    – NateS

    4. Juli 2020 um 12:44 Uhr

1270780cookie-checkAktivität mit java.lang.IllegalArgumentException auf Android-API >=24 kann nicht fortgesetzt werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy