320x100
안녕하세요? 사진찍는 개발자입니다.
효율적인 Fragment 셋팅은 어떤 것이 있을까 조사하고 최적환 결과를 작성해 봅니다.
UI 초기화 및 Handler 설정
@Override
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// UI 초기화 (레이아웃 인플레이션)
View view = inflater.inflate(R.layout.fragment_layout, container, false);
// UI 컴포넌트 바인딩
recyclerView = view.findViewById(R.id.recyclerView);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// UI 설정 및 초기 데이터 로드
initRecyclerView();
setupUiHandler();
}
WorkThread Handler 및 백그라운드 작업
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// WorkThread Handler 생성
HandlerThread handlerThread = new HandlerThread("WorkerThread");
handlerThread.start();
workHandler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
// 백그라운드 작업 처리
}
};
}
리소스 관리 및 정리
@Override
public void onPause() {
super.onPause();
// 불필요한 리소스 해제, 데이터 저장
}
@Override
public void onDestroyView() {
super.onDestroyView();
// RecyclerView 어댑터 해제
if (recyclerView != null) {
recyclerView.setAdapter(null);
}
}
@Override
public void onDestroy() {
super.onDestroy();
// WorkThread Handler 종료
if (workHandler != null) {
workHandler.getLooper().quit();
}
}
생애주기별 권장요약
생애주기별 권장사용에 대해 정리하면 아래와 같습니다.
- onCreate():
- 초기화 작업
- 백그라운드 스레드 생성
- ViewModel 초기화
- onCreateView():
- 레이아웃 인플레이션
- 기본 UI 컴포넌트 찾기
- onViewCreated():
- RecyclerView 설정
- UI Handler 초기화
- 초기 데이터 로드
- 이벤트 리스너 설정
- onStart():
- 데이터 새로고침
- 애니메이션 시작
- onResume():
- 센서, 위치 서비스 등 활성화
- 실시간 업데이트 시작
- onPause():
- 리소스 해제
- 데이터 저장
- 애니메이션 일시정지
- onStop():
- 무거운 작업 중지
- 배터리 집약적 작업 중단
- onDestroyView():
- UI 관련 리소스 정리
- 뷰 참조 해제
- onDestroy():
- 최종 리소스 정리
- 스레드 종료
최종 소스
최종적으로 소스를 정리하면 아래와 같다.
public class MyFragment extends Fragment {
private RecyclerView recyclerView;
private Handler uiHandler;
private Handler workHandler;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initWorkHandler();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_layout, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initViews(view);
setupRecyclerView();
initUiHandler();
}
@Override
public void onPause() {
super.onPause();
// 불필요한 리소스 해제, 데이터 저장
}
@Override
public void onDestroyView() {
super.onDestroyView();
// RecyclerView 어댑터 해제
if (recyclerView != null) {
recyclerView.setAdapter(null);
}
}
@Override
public void onDestroy() {
super.onDestroy();
// WorkThread Handler 종료
if (workHandler != null) {
workHandler.getLooper().quit();
}
}
}
반응형
'개발 이야기 > Android (안드로이드)' 카테고리의 다른 글
Jetpack Compose 초보자 가이드 (0) | 2024.12.23 |
---|---|
Android DataBinding과 ViewModel 적용하기 (6) | 2024.12.12 |
Java8 Stream API 찍먹하기 (2) | 2024.12.11 |
Android RecyclerView를 이용한 페이징 기법정리 (0) | 2024.06.26 |
Android App 개발에 많이 사용하는 디자인패턴 (0) | 2024.06.04 |
Android | Java | 특정 소수점까지 잘라서 계산 후 반올림 하기 (0) | 2024.01.31 |
Android | 앱 화면 구성 중에 DB에서 Data 읽어올때 코딩 가이드 (0) | 2023.12.28 |
Android | 스마트폰 설치한 앱의 APK 추출방법 (0) | 2023.12.13 |