본문 바로가기

개발 이야기/Android (안드로이드)

Fragment 효율적인 코딩 방법에 대한 정리

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();
        }
    }
}

 

반응형