프로그래밍을 하면서 의도치 않게 놓치는 부분들이 있다.
사소한 실수들이지만 때로는 크리티컬한 이슈로 이어지는 부분들이 있다.
이번 글에서는 필자의 그런 경험들을 작성해보고자 한다.
1. RecyclerView의 itemView 재활용
RecyclerView와 ListView의 가장 큰 차이점은 성능을 위해서 RecyclerView에서는 itemView를 재활용 한다는 점이다.
성능적인 부분에서는 이점이 많지만, 오히려 신경을 써주지 않으면 문제가 발생할 수 있다.
예를 들어서 하나의 RecyclerView에 itemType이 다르게 설계될 수도 있다.
그럴 때 다른 listener를 등록하기도 하고, 속성 값을 다르게 설정하기도 한다.
ListView로 설계를 했을 때에는 매번 새로 View를 그려주기 때문에 문제가 발생하지 않겠지만,
RecyclerView를 사용할 때는 이전에 사용하던 itemView를 사용하면서 이전 item의 listener나 속성 값이 남아있어
의도하지 않은 동작을 할 수도 있다.
만약에 다른 type의 itemView를 하나의 RecyclerView에서 사용하게 된다면 이 부분을 신경써주면 좋을 것 같다.
2. resource close
IO 등을 할 때에 실패할 수도 있기 때문에 보통 try-catch로 묶어서 사용한다.
이때, 사용한 stream을 close 해주지 않는다면 메모리 누수가 생기는 등 문제들이 발생할 수 있다.
이럴 때 편하게 사용할 수 있는 것이 try-with-resources 이다.
기존에는 finally에서 close를 해주었다면, try-with-resources를 사용할 때는 자원을 자동으로 반납해준다.
아래처럼 사용 했을 때 더 간결하고 안전한 코드를 작성할 수 있다.
public void readCursor(){
try{
if(cursor.moveToNext()){
cursor.getString(0);
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
cursor.close();
}
}
public void readCursorTryWithResources(){
try(Cursor cursor = new Cursor()){
if(cursor.moveToNext()){
cursor.getString(0);
}
}
catch(Exception e){
e.printStackTrace();
}
}
'Android > 이것저것' 카테고리의 다른 글
[Android] setTextSize로 size 지정할 때 유의할 점 (0) | 2023.06.18 |
---|---|
[Android] 단말을 명령어로 조종해보자 (ADB, Scrcpy) (0) | 2023.04.23 |
[Android] 코드 스캔하기 with Lint (0) | 2023.04.09 |
[Android] 터치 영역 넓히기 (0) | 2023.03.26 |
[Android] Monkey Test #2 (0) | 2023.03.12 |
댓글