Android 개발 편의 기능

Hue·2023년 3월 9일
0

Android/Kotlin

목록 보기
21/42

findViewById() 성능이슈 개선 : 갯수가 많아질 수록 번거롭고 속도 저하

① ButterKinfe

찾는것을 번거롭지 않게 만들어줌 (외부 Library)
편의성은 개선되었으나 성능이슈는 여전함...
JDK 경로를 찾아서 사용, 안드로이드 스튜디오 프리뷰버전은 압축해제버전이라 어려움

② ViewBinding

ButterKnife의 대체품, 찾는것뿐만 아니라 속도까지 성능 개선
안드로이드의 기본기능 (Library아님) 기본적으로 꺼져 있음
기능을 켜면 객체를 만들지 않아도 자동으로 가지고 있음

setContentView(R.layout.activity_main); 를 끊어버리기
id를 기반으로 한 참조변수를 가지고 있게 알아서 해주는 Binding 객체
자동으로 root를 가지고 있음 (LayoutInflate를 대신 해줌)

  • ViewBinding 클래스명
    ⓐ 액티비티 레이아웃 파일명과 자동으로 만들어지는 바인딩 클래스명
    activity_main.xml --> ActivityMainBinding
    activity_second.xml --> ActivitySecondBinding
    activity_xxx.xml --> ActivityXxxBinding

    ⓑ 프레그먼트 레이아웃 파일명과 자동으로 만들어지는 바인딩 클래스명
    fragment_my.xml --> FragmentMyBinding
    fragment_login.xml --> FragmentLoginBinding
    fragment_xxx.xml --> FragmentXxxBinding

    ⓒ 리사이클러뷰(아답터뷰)의 아이템 1개 레이아웃 파일명과 자동으로 만들어지는 바인딩 클래스명
    recycler_item.xml --> RecyclerItemBinding
    recycler_xxx.xml --> RecyclerXxxBinding

  • build:grdle(:app)
buildFeatures {
        viewBinding true
    }

③ DataBinding

참조변수를 아예 만들지 않고 또다른 변수 (Observable)를 만들어서 연결, 변수만 신경쓰도록...!
요즘 많이 사용되고 있는 이벤트 처리 방법

  • build:grdle(:app)
buildFeatures {
        dataBinding true
    }

자동으로 화면 갱신 BUT 아무 변수나 바뀔 때마다 갱신하면 앱 효율이 떨어짐
일반 자료형은 값이 변경되어도 화면 갱신이 이루어지지 않고,
dataBinding 기능에 의해 변수값이 바뀌면 화면이 자동갱신되는 특별한 자료형 : ObservableXXX 클래스 객체 (XXX에는 기본자료형, 다른자료형은 Field)

public ObservableField<String> name = new ObservableField<>(); //패키지명이 서로 다른곳에서 사용하기 위해서 public
public ObservableInt age = new ObservableInt();
public ObservableBoolean favor = new ObservableBoolean();

🌷 LifeCycleMethod

Activity 클래스의 Lifecycle Method
: 액티비티가 객체로 만들어져서 화면에 보여지고 종료되어 메모리에서 사라질때까지 상황에 따라 자동으로 실행되는 생명주기 콜백 메소드

① onCreate : 액티비티가 처음 메모리에 만들어질때 자동으로 실행되는 메소드
이 메소드가 실행되는동안에는 어떤 UI도 그려지지 않은 상태
② onStart : 액티비티의 뷰들이 보이기 시작할때 자동호출
이 메소드 중에는 터치해도 반응하지 않음 (인터랙션 불가) --> 가급적 오래걸리는 작업은 하지말것
③ onResume : 액티비티가 보이고 터치도 가능한 상태

----------- Running --------------

④ onPause : 어떤 이유에서든 액티비티가 안보이기 시작할때 자동 실행되는 메소드
화면에 UI는 아직 보이지만 터치는 안되는 상태 (보통 이곳에서 스레드를 pause 처리)
⑤ onStop : 완전히 안보일때 자동실행되는 메소드

--- 액티비티가 다른 액티비티에 의해 가려진 상태라면 4,5 메소드까지 작동 ----

⑥ onDestroy : 스마트폰의 '뒤로가기' 버튼이나 finish() 메소드로 액티비티가 종료되었을때, 액티비티가 메모리에서 소멸될때 자동으로 실행되는 메소드
Android 12버전 (api 31) 디바이스부터는 ✌ 처음 실행되는 액티비티(intent-filter를 가지는) ✌는 '뒤로가기' 버튼을 눌러도 finish() 되지 않음 (속도 개선을 위해)
만약 뒤로가기 버튼으로 종료시키고 싶다면 onBackPressed() 재정의하여 직접 finish() 하거나 최근실행목록에서 스와이프로 제거

0개의 댓글