반응형
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()를 통해서 생성하는게 일반적입니다.
참조 :
반응형
'안드로이드' 카테고리의 다른 글
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 |