NOW OR NEVER

[Android] Thread & Fragment 본문

Android

[Android] Thread & Fragment

LAURA 2023. 6. 26. 16:01
반응형

Thread

  • 동시 처리는 동기처리이고 순차적으로 처리는 비동기처리라고 한다, thread는 동기처리이다
  • 네트워크는 오류가 발생할 가능성이 매우 높기 때문에 돌발상황이 있을 수 있다. 그래서 해당 부분은 실행에 대한 안정성을 확보 하기 위해 해당 부분은 thread로 관리 한다.
  • 예외는 예측이 가능한 오류
  • main thread는 안드로이드 OS에 의해 관리
  • kotlin에서는 runOnUiThread(화면 관리 요소 처리) 별도 작성 필요 없이 main thread로 구현 가능 하다
  • 개발자가 만드는 thread는 누적 thread이다.

Fragment

  • new- fragment - fragment(blank)
  • 화면이 여러 개 일때 fragment가 필요하다
  • 여러 화면을 가지고 있는 애플리케이션은 여러 Activity를 가지고 있는 애플리케이션
  • 관리하는 activity 미리 변수로 받아놓기
  • replaceFragment(fragment이름, addToBackStack여부, 애니메이션여부)
  • res-layout - new 
  • main activity
    • main acitivity layout에 fragmentContainerView 배치(name은 비우기)
    • fragment 패키지는 androidx 로 시작하는 패키지로 임포트 한다.
    • main activity가 fragment를 관리한다. 그래서 fragment 관련 변수들을 main activity에 선언한다.
    • main activity에 작성하는 fragment basic code(onCreate 밑에 작성)
    // 지정한 Fragment를 보여주는 메서드
    fun replaceFragment(name:FragmentName, addToBackStack:Boolean, animate:Boolean){
        // Fragment 교체 상태로 설정한다.
        val fragmentTransaction = supportFragmentManager.beginTransaction()
        // 새로운 Fragment를 담을 변수
        var newFragment:Fragment? = null

        // 이름으로 분기한다.
        when(name){
            FragmentName.FRAGMENT_MAIN -> {
                // Fragment 객체를 생성한다.
                newFragment = MainFragment()
            }
            FragmentName.FRAGMENT_INPUT -> {
                newFragment = InputFragment()
            }
            FragmentName.FRAGMENT_RESULT -> {

            }
        }

        if(newFragment != null) {
            // Fragment를 교채한다.
            fragmentTransaction.replace(R.id.mainContainer, newFragment)

            if (animate == true) {
                // 애니메이션을 설정한다.
                fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            }

            if (addToBackStack == true) {
                // Fragment를 Backstack에 넣어 이전으로 돌아가는 기능이 동작할 수 있도록 한다.
                fragmentTransaction.addToBackStack(name.str)
            }

            // 교체 명령이 동작하도록 한다.
            fragmentTransaction.commit()
        }
    }

    // Fragment를 BackStack에서 제거한다.
    fun removeFragment(name:FragmentName){
        supportFragmentManager.popBackStack(name.str, FragmentManager.POP_BACK_STACK_INCLUSIVE)
    }


--------------------------------------------------

enum class FragmentName(var str:String){
    
}

 

etc

  • Activity : 눈에 보이는 화면을 관리하는 실행단위
  • Service : 눈에 보이지 않는 실행단위
  • BroadCast Receiver : 시스템에서 발생하는 사건에 대해 처리가 필요할 경우
  • res폴더에 들어가는 파일과 폴더 명은 무조건 다 소문자여야 한다.
  • recycler view에 좌우 여백이 있으면 보기 안좋아서 꽉 차게 두는 것이 일반 적이다
  • enum 작성 시 맨 뒤 아이템에 쉼표 작성 시 코틀린은 에러 안나지만 자바는 에러난다.

 

Comments