Ответ 1
У меня была такая же проблема в моем проекте. Во время исследования я обнаружил, что это также возможно, если вы пытаетесь получить доступ к static
переменным или методам из метода Activity onResume()
.
В моем приложении произошел сбой на устройствах с версией 7.0
, 7.1.1
и 8.0.0
со следующей командой 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)
Мой код в строках, приведенных в отчете, просто:
// HomeActivity class
@Override
public void onResume() {
mPresenter.onResume();
super.onResume();
renderView();
}
// BaseActivity class
@Override
protected void onResume() {
super.onResume();
// some other code
}
Я сделал кое-что по этому поводу и нашел этот подобный вопрос.
Поскольку брошенное IllegalArgumentException
не содержит подробных сообщений, я собираюсь попробовать добавить дополнительные журналы, как это предлагается здесь.
Тем временем, пожалуйста, оцените любую помощь!
У меня была такая же проблема в моем проекте. Во время исследования я обнаружил, что это также возможно, если вы пытаетесь получить доступ к static
переменным или методам из метода Activity onResume()
.
Проблема заключается в вашей посылке. Вам нужно найти, где активность, фрагмент, представление - это сохранение посылки для сохранения состояния. Будет неправильная последовательность. например
@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];
}
};
}
поэтому проблема может быть где-то в
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(text);
}
private SavedState(Parcel source) {
super(source);
text = source.readString();
}
когда последовательность чтения источника посылок плохая.
catch (Exception e) {
if (!mInstrumentation.onException(r.activity, e)) {
throw new RuntimeException(
"Unable to resume activity "
+ r.intent.getComponent().toShortString()
+ ": " + e.toString(), e);
}
}
это цепочечное исключение, поэтому проверьте e.getCause() stacktrace ->, пока причина не станет нулевой
если вы не найдете его, посмотрите на метод в потоке деятельности, который вызывает блок 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 я = mRelaunchingActivities.size() - 1; я >= 0; i--) { final ActivityClientRecord relaunching = mRelaunchingActivities.get(i); if (relaunching.token == r.token && relaunching.onlyLocalRequest && relaunching.startsNotResumed) { relaunching.startsNotResumed = false; } }
вам нужно искать причину в:
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)
и лучше всего застрелили ответ на этот вопрос:
rjava.lang.IllegalArgumentException on startActivity (намерение, пакетное анимация)