본문 바로가기

Dev/안드로이드

[안드로이드 짤막 공부] 23.07.16

1. DTO를 위해 data class를 생성해 사용할 때, 패러미터들은 디폴트 값을 지녀야 한다.

 

2. startActivity()로 새로운 액티비티를 실행할 때, 기존에  쌓여있던 모든 액티비티를 종료하기 위해서는

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK

이와 같이 intent의 플래그를 설정하면 가능하다.

 

FLAG_ACTIVITY_NEW_TASK: 다른 affinity 값을 가지는 액티비티 호출 시 새로운 task 스택 생성하고 그곳에 생성하는 액티비티 push. 기존의 task 스택들 중 호출하는 액티비티와 affininity 값이 같은 task가 있다면 해당 스택 내로 push 됨 -> 중복되는 액티비티 인스턴스가 스택에 존재할 수 있음

 

FLAG_ACTIVITY_CLEAR_TOP: 호출하려는 액티비티가 task스택 내에 존재하면, 스택 상 해당 액티비티 위에 있는 액티비티들과 해당 액티비티까지 모두 pop 한 후, 그 액티비티가 스택의 최상위에 위치하도록 하여 생성. 이때 호출된 액티비티는 onCreate()부터 시작.

 

FLAG_ACTIVITY_CLEAR_TASK: 현재 task를 비워버림.

 

그런데 레퍼런스를 찾다보니 FLAG_ACTIVITY_CLEAR_TOP 플래그는 필요 없을 거 같아서 빼고 실행해 보았더니, 의도한 대로 동작했다.

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

 

3. RecyclerView나 ListView 사용 시, View를 재활용하면서 생기는 문제들이 있는데(빠른 스크롤 반복 시, 해당하지 않는 조건의 View 속성이 바뀐다든지)

일단 임시방편으로 어댑터 내의 getView() 메소드에 있던 

var view = convertView
if(view == null){
    view = LayoutInflater.from(parent?.context).inflate(R.layout.board_list_item, parent, false)
}

이 부분을

var view = convertView

view = LayoutInflater.from(parent?.context).inflate(R.layout.board_list_item, parent, false)

이렇게 바꾸어 해결했다. 그런데 이렇게 해결해버리면 퍼포먼스 측면에서 문제가 생길 거 같아 이 부분에 대해서는 조금 더 찾아봐야 할 거 같다.