web-dev-qa-db-de.com

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

Es gibt einen Absturz in meiner App auf Geräten, auf denen die Versionen 7.0, 7.1.1 und 8.0.0 mit dem folgenden Stacktrace ausgeführt werden:

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 lautet 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 gesucht und diese ähnliche Frage gefunden.

Da die geworfene Variable IllegalArgumentException keine Detailmeldung enthält, werde ich versuchen, zusätzliche Protokolle wie vorgeschlagen hier einzufügen. 

In der Zwischenzeit freuen wir uns über jede Hilfe!

41
Jiyeh

Ich hatte auch das gleiche Problem in meinem Projekt. Während der Recherche habe ich festgestellt, dass es auch möglich sein kann, wenn Sie versuchen, auf static-Variablen oder -Methoden von der onResume()-Methode Ihrer Aktivität zuzugreifen.

1
Ajay - Rlogical
            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 prüfe e.getCause () stacktrace -> bis die Ursache null sein wird 

wenn Sie es nicht finden, schauen Sie sich die Methode im Activity-Thread an, die 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 Gründen suchen in:

  • Activity.onStateNotSaved ();
  • Activity.mFragments.noteStateNotSaved ();
  • Activity.performResume ();
  • und abschließende 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 on startActivity (Absicht, Bündelanimation)

0
ceph3us

Problem ist bei Ihnen Paket. Sie müssen herausfinden, wo Aktivität, Fragment, Ansicht Flurstück speichert, um den Status 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];
        }
    };
}

so könnte das problem irgendwo sein 

    @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 Sequenz der Parcel-Quelldaten schlecht ist. 

0