Fragment 재실행 에러(make sure class name exists, ~~)

Posted by ITPangPang
2016. 10. 15. 00:18 안드로이드 에러/RuntimeException


Fragment 재실행 에러

(make sure class name exists, is public, and 

has an empty constructor that is public)



ㆍ 요즘 Fragment는 안드로이드에서 필수적인 부분이죠


ㆍ 그런데 가끔씩 위와 같은 에러메시지가 뜨면서 앱이

    종료되는 것을 볼 수 있습니다.




앱이 Crash 났을때

usb를 꼽으면 에러메시지를

확인할 수 있습니다



이런식의 에러가 나옵니다

어떤 경우에 발생하는가?


위의 같은 경우는

앱이 재생성될때 발생됩니다.


예를 들어

앱을 쓰다가 홈키

누르면 onPause로 빠지는데


이 상태에서 다른 앱들을

막 실행하고 작업하고 합니다

그럼 만들던 앱은 점점 뒤로

목록 뒤쪽으로 가게되고


메모리가 부족할 경우

메모리 확보를 위하여

오래된 앱 순으로 

종료시키게 됩니다


그 상태에서 다시

홈키를 눌러서 해당 앱을

다시 누르면 메인액티비티부터

다시 재생성 되는데

Fragment를 호출할때

문제가 생기가 됩니다


TEST를 해보려면?


위에 에러메시지에

나와있듯이 Fragment

사용하시는 분은


기본생성자가 있으신분들은

주석처리 잠시 해보시고

만약 없으신분들은


앱을 키고 홈키를 누릅니다


그리고 다른 앱들을 15개 정도

켰다가 홈키를 누릅니다

(디바이스 성능마다 갯수 차이가 있겠지만

갤럭시 S7기준 15개, S4이하에서는 전부 10개 밑으로

실험 가능했습니다)


그리고 다시 홈키를 길게 눌러서

Fragment가 있는 앱을 눌러서

실행시켜봅니다


그럼 crash 현상이 나는것을

확인 할 수 있습니다


해결방법


이 에러관련 내용은

 안드로이드 Reference에 나와있는

부분입니다



뭐 대충

Fragment를 사용할때

no-argument constructor를

must include!!

하랍니다..


저는 영어가 약해서

공부할겸 레퍼런스 보는게

취미다보니 보게됬습니다.


no-argument constructor

즉, 아무것도 없는 생성자를

하나 만들라는 말인 것 같습니다.


아무것도 없는

생성자란!!

public class MyTestFragment extends Fragment
{
public MyTestFragment()
{

}


public MyTestFragment(String ~, int ~, )
{
this.~~~
}
}


첫번째 처럼 아무것도

없는

public MyTestfragment()

이것을 만들라는 의미입니다


아래처럼

public MyTestFragment(String ~, int ~)

이런 생성자가 있더라도

위에 처럼 꼭!! 추가로 아무것도 없는

no-argument 생성자를 만들어야 합니다



참고사이트 : 

https://developer.android.com/reference/android/app/Fragment.html