728x90
반응형
[ Android/Android ]LeakCanary 사용하기2022-08-07 00:35:06들어가며 지난번의 메모리 누수 이슈로 원인을 찾아 헤매다 LeakCanary를 알게 되었다. 안드로이드 스튜디오에서 제공하는 프로파일러에서도 memory leak 을 잡아 낼 수 있는데 개인적으로 사용하기가 어려웠다. 그래서 따로 사용하는 법(?) 이해하는 법을 학습했지만 문제를 해결하기 위한 원인을 찾아내는 데에는 한계가 있었다고 생각한다. 그래서 LeakCanary를 사용해보고자 하였다. 메모리 누수 memory leak A small leak will sink a great ship. - Benjamin Franklin 쉽게 얘기해서 우리는 먹으면 싸야한다. 근데 그게 제때 배출이 안되고 안에서 자꾸 쌓인다고 생각하면 어떤가? 탈이 난다. 더이상 참조되지 않는 것들은 가비지 컬렉션에 의해 수거되어야..
[ pinslog/Log.daily() ]android.view.WindowManagerGlobal: findViewLocked / android memory leak 해결하기 (근데 이제 fragment 를 곁들인)2022-08-06 00:22:40android.view.WindowManagerGlobal: findViewLocked 🥺 activity 가 finish 상태일 때 dialog 를 dismiss() 하려고 할 때 생기는 오류 에러 발생 상황 로그인 화면에서 로그인 저장 체크박스에 체크를 하고 로그인 버튼을 바로 누르는 경우 체크를 하면 CustomToast 가 뜬다. 로그인 버튼을 누르면 홈 화면으로 이동한다. (LoginActivity.finish()) 로그아웃하는 경우 로그아웃을 클릭하면 한번 더 확인하는 CustomConfirmDialog 가 뜬다. ‘네’ 를 선택하면 로그아웃 되어 로그인 화면으로 이동한다. 해결 방안 💡 activity 가 finish 되기 전에 dialog 를 dismiss 해야한다. 첫번째 해결책 acti..
[ pinslog/Log.daily() ]commit 복구하기 / java list 자르기2022-08-04 23:42:17git reset 을 reset 하기 (commit 복구하기) 개발 브랜치에서 작업을 하고 있었는데 다른 요청이 들어왔다. 우선 순위가 더 높은 작업이었기 때문에 지금 하고 있던 작업을 다른 브랜치에 옮겨 놓고, merge 하기 전, 아무튼 기준이 되는 포인트로 돌아가서 깨끗한 상태에서 작업을 하려고 했다. 옮기고..reset 명령어를 사용해 원하는 포인트로 돌아갔다. 실시간으로 작업해둔 것들이 사라지는 것을 확인했다. 그리고 옮겨놓은 브랜치로 이동했는데... 변경한 작업 이력이 모두 사.라.졌.다! 음? 휴가에서 갓 돌아온 나..아직 시차적응이 안됐나보군(집콕했죠?) 하며 reset 을 reset 하는 방법을 찾아봤다. git reflog 명령어를 통해서 git 이력을 확인할 수 있다. 돌아가고 싶은 ..
[ pinslog ]10개월차 주니어 안드로이드 개발자의 회고록2022-08-03 23:09:42들어가며 어느덧 입사한지도 10개월 차에 접어들었습니다. 집-학원 집-학원 하던 게 엊그제 같은데 어느새 집-회사 집-회사 하는 직장인이 되었네요. 감회가 새롭습니다. 취업 준비를 하던 당시 어떤 분의 회고를 읽고 '나도 입사하면 글 써야지'라고 마음을 먹은 것도.. 엊그제 같은데.. 시간이 벌써 이렇게나 흘러버렸습니다. 하지만 늦었다고 포기하는 것만큼 아쉬운 것이 없겠지요? 이제라도 그동안 신입 개발자로 일하며 느꼈던 것을 정리해보도록 하겠습니다. 누구세요? 먼저 짧게 제 소개를 해보자면 저는 스마트 헬스케어 스타트업에 재직중인 안드로이드 개발자입니다. 입사와 동시에 기존 레거시 프로젝트를 토대로 자사 신규 플랫폼을 개발하는 프로젝트에 투입이 되었고 현재 실서비스를 앞두고 있습니다. 작고 소중한 개발팀..
[ Android/Android ]fastlane 으로 Android 앱 배포 쉽게 하기 (feat. windows)2022-07-05 23:40:38들어가며 개발이 어느정도 마무리가 되면..(끝은 없으니까요 ^_ㅠ?) 사용자를 만나기 위한 준비를 해야한다. 여차저차 준비를 하고 내 자식같은 아이가 세상에 나오면.. 높은 확률로 다시 고쳐야할 일이 생긴다. 수정하고 내놓고 수정하고 내놓고.. 안드로이드 앱의 경우 출시 및 출시 준비 과정은 다음과 같다. (간략하게 작성한것으로 상이할 수 있습니다.) 1. 출시 전 속성 지정 및 설정 - debuggable = false (안하면 앱이 안올라가는거 아시죠) - app signing (빌드할 때 보통 자동으로 되지만 일단 넣었다.) - versionCode++ - versionName 지정 2. buildType 지정 후 build 진행 3. play console 에서 업로드 진행 4. 내부 테스트용 앱..
[ Android/Android ]Android Jetpack Compose 맛보기2022-07-03 23:03:42Android Jetpack Compose 네이티브 Android UI를 빌드하기 위한 최신 도구 키트 Jetpack Compose 선언적 UI 방식 💡 상태를 UI 로 변환한다. UI는 변경할 수 없고 한번 생성하면 업데이트가 불가능하다. 앱 상태가 바뀌면 새로운 상태를 새로운 표현으로 변환하는 것 ⇒ 동기화 문제가 완전히 해결된다. 문장을 읽었을 때는 상태가 바뀌면 다시 그림을 그리겠다는 것으로 이해되어 비효율적이지 않을까 생각했다. 하지만 compose 는 지능적이기 때문에 변경되지 않은 요소의 작업은 건너 뛴다고 한다. 따라서 코드는 특정 상태에 대한 UI 형태를 설명할 뿐 생성 방법을 지정 하지는 않겠다는 것이다. Declarative UI Toolkit 요즘의 앱들은 데이터가 동적이고 실시간으..
[ 배경지식/배경지식 ]Class | Object | Instance | IoC | DI2022-07-02 23:30:05Class, Object, Instance 👉🏻 Class : 설계도 👉🏻 Object : 실체화가 가능한 것 👉🏻 Instance : 실체화 된 것 예를 들어 내가 집을 꾸미기 위해 가구를 사자! 라고 한다면 이말을 들은 사람은 어떤 가구? 라고 되물을 것이다. 가구는 추상적인 것으로 ‘개념'에 가깝다. 그래서 나는 의자를 살것이라고 대답한다. 의자를 주문하면 실제 의자가 집으로 배달되어 올테니.. 의자는 실체화가 가능한 Object 가 된다. 그렇게 구입해 도착한 내 눈 앞의 의자는 실제 세계에 존재하는 것이 된다. 이때의 의자는 instance 가 된다. IoC (Inversion of Control), 제어의 역전 집에 가구를 배치한다고 생각해보자. (위에서 의자를 예로 들었기 때문에 여기서도 의..
[ Android/Android ]안드로이드 애플리케이션 설계 패턴2022-06-18 14:35:56MVC 패턴 💡 애플리케이션 구조를 Model, View, Controller 세개의 측면으로 관심사를 분리한다. 개발을 배울 때 가장 먼저 배운 패턴이다. 그렇기 때문에 이해하기도 가장 쉬웠다고 생각한다. 안드로이드에서 activity, fragment 가 view 역할을 한다. 동시에 controller 의 역할을 하기도 한다. 장점 직관적이다. 위에서 이해하기 쉬웠던 이유가 바로 이 장점 때문이 아닐까? 코드를 파악하기 쉽다. 단점 (안드로이드에서는) 위에서 말했듯 activity, fragment 가 뷰와 컨트롤러의 역할을 겸하다 보니 앱의 규모가 커지면 수천줄의 코드가 작성되어 유지보수가 힘들어진다. 컨트롤러는 뷰와 모델에 의존적이고, 뷰는 모델에 의존적이기 때문에 결합도가 높아 유닛 테스트가 ..
728x90
반응형