안드로이드

[Android] Fragment 객체 생성 이유

코딩하는후운 2022. 11. 4. 16:07
반응형

Fragment new Instance

public static HogeFragment newInstance(){
     HogeFragment fragment = new HogeFragment();
     Bundle args =  new Bundle();
     fragment.setArguments(args);
     return fragment;
}

 

프래그먼트 생성시 newInstance()로 객체를 생성하는 이유

안드로이드는 메모리가 부족하게 되면 액티비티를 파기하여 메모리를 확보합니다.
액티비티 뿐만 아니고 메모리가 부족하면 프래그먼트도 파기되며 필요시, 재생성되게 됩니다.

//문제
AFragment f = new AFragment(num);
위와같은 생성자를 만든다면 비어있는 생성자를 만들어주지 않으면 에러가 발생하게 됩니다.

setter를 통해서 생성할 경우
-프래그먼트가 재생성 될 때에 호출되는 메소드는 아래와 같다.
Fragment#instantiate(Context context, String, fname, Bundle args)
이 메소드가 호출되고 아까 말했듯이, 빈 생성자가 호출되게 됩니다.

newInstance()를 통해서 셋팅했던 Bundle이 재생성 될때 다시 셋팅되어 넘어옵니다.
그렇기 때문에 Bundle을 통해서 설정한 멤버 변수들은 액티비티가 파기될 때 따로 onSaveInstanceState()을 하지 않아도 잘 복구됩니다.

그래서 프래그먼트를 생성할 때에는 newInstance()를 통해서 생성하는게 일반적입니다.

 

 

참조 :

https://m.blog.naver.com/PostView.nhn?blogId=tpgns8488&logNo=220989078813&proxyReferer=https%3A%2F%2Fwww.google.com%2F 

 

Android Fragment newInstance()로 생성하는 이유

그먼트를 생성할때 보통 아래와 같이 newInstance() 를 사용해서 객체를 생성하시죠. public static Hoge...

blog.naver.com

 

반응형

'안드로이드' 카테고리의 다른 글

Android KeyStore  (0) 2022.11.04
[Android] Gradle KeyStore 셋팅  (0) 2022.11.04
[Android] Fragment commit commitNow 차이  (0) 2022.11.04
[Android] Fragment replace add 차이  (0) 2022.11.04
Firebase 설정, firebase콘솔에 앱등록  (0) 2022.11.04