반응형
Android API> = 24에서 java.lang.IllegalArgumentException으로 활동을 재개 할 수 없습니다.
이 버전을 실행하는 장치에 내 응용 프로그램의 충돌은 7.0
, 7.1.1
그리고 8.0.0
다음 스택 트레이스를 가진 :
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
더 자세한 메시지를 보내지, 내가 제안 추가에 추가 할 것을 여기 에 추가 합니다.
그동안 감사합니다!
catch (Exception e) {
if (!mInstrumentation.onException(r.activity, e)) {
throw new RuntimeException(
"Unable to resume activity "
+ r.intent.getComponent().toShortString()
+ ": " + e.toString(), e);
}
}
예외 예외 원인이 null이 될 때까지 e.getCause () stacktrace-> 검사
방법의 방법을 호출하는 활동.
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;
}
}
}
다음에서 이유를 검색해야합니다.
- Activity.onStateNotSaved ();
- Activity.mFragments.noteStateNotSaved ();
- Activity.performResume ();
- 및 최종 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)
베스트 샷은이 문제에 대한 답입니다.
startActivity (intent, bundle animantion)의 rjava.lang.IllegalArgumentException
내 프로젝트에서도 같은 문제가 발생했습니다. 조사하는 동안 static
활동의 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();
}
Parcel 소스 읽기의 순서가 나쁠 때.
반응형
'ProgramingTip' 카테고리의 다른 글
nginx 1.5+ 파일 업로드 — 모범 사례 (0) | 2021.01.08 |
---|---|
JavaScript >>> 연산자는 무엇이며 어떻게 사용합니까? (0) | 2021.01.08 |
Windows Server 2008 R2에서 실행되는 MSDN PeerChannel“SecureChat”받기 (0) | 2021.01.08 |
WADL 문제 / 계약 우선 접근 방식으로 Jersey를 사용하여 XSD 생성 (0) | 2021.01.08 |
프로그래밍 방식으로 Whatsapp 연락처 새로 고침 (0) | 2021.01.08 |