본문 바로가기

나의 플랫폼/안드로이드

[Android] activity has been destroyed

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

activity has been destroyed


Fragment 이동을 위해, begintransaction commit을 진행 할때 위와 같은 이슈가 발생할 가능성이 있다.


http://gogorchg.tistory.com/entry/Android-Can-not-perform-this-action-after-onSaveInstanceState

위 사항과 비슷한 현상때문에 발생한 오류 인데요.


머 에러 문구도 간단하다.

"이미 종료된 activity이니 호출 따위 하지마!" 이다 ㅎ


그래서 아래와 같은 예외처리 함수를 만들었다.


1
2
3
4
5
6
7
    public static boolean isActivityAvailable(Activity activity) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return !activity.isFinishing() && !activity.isDestroyed();
        } else {
            return !activity.isFinishing();
        }
    }
cs


간단하다~ 종료 되었냐 안되었냐 판단해주는 함수이다.


isDestroyed는 SDK 17 이상부터 지원 되므로 예외처리를 하였다.


사용법은 아래와 같다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void switchFragment(final Fragment fragment) {
    if (SysUtils.isActivityAvailable(this)) {
     FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
         .replace(R.id.container, fragment)
            .commitAllowingStateLoss();
    }
}
cs


참고 바란다.