전체 글 (47) 썸네일형 리스트형 [안드로이드] 앱 성능 최적화 : 메모리 최적화 요즘은 안드로이드 폰의 하드웨어 성능이 많이 좋아져서 예전처럼 OOM(Out Of Memory) 오류를 자주 보긴 어렵지만,초창기 안드로이드 시절에는 메모리 부족으로 인한 앱 종료가 흔한 문제였다. 지금도 앱을 개발하다 보면 "앱이 느려요", "종료돼요", "메모리 부족 경고가 떠요" 같은 피드백을 종종 받게 되는데, 이럴 땐 가장 먼저 앱의 메모리 사용량을 점검해보는 것이 좋다. 이 글에서는 메모리 누수를 방지하고, 효율적인 메모리 사용을 통해 성능을 개선하는 방법을 정리해보려고한다. 1. 불필요한 Context 참조 피하기Context는 앱의 거의 모든 리소스에 접근 가능한 강력한 객체지만, 잘못 사용하면 메모리 누수의 주범이 된다. ❌ 잘못된 예:class MyUtil(context: Context.. [Jetpack Compose] Activity Lifecycle에 맞게 기능 구현 Jetpack Compose를 스터디하면서 state에 따라 화면이 자동으로 갱신된다는 점을 정리했다. 이제는 기존 Activity의 생명주기에 따라 동작하는 기능을 Jetpack Compose에서 어떻게 구현할 수 있는지에 대해 정리해보려 한다. 기존의 onCreate, onStart, onResume 등의 메서드를 직접 override 하는 방식과는 조금 다른 Compose만의 접근 방식이 있어서 익혀두면 유용하다.1. Lifecycle의 중요성.앱을 만들다 보면 화면에 진입할 때 데이터를 로딩하거나, 백그라운드로 나가면 특정 리소스 해제가 필요하다. 이런 동작은 Activity의 생명주기에 맞춰 처리해야 앱이 안정적이고 성능도 좋아지기 때문에 Activity Lifecycle을 중요하다.2. Jet.. [안드로이드]커스텀 EditText 만들기 Android에서 사용자 입력을 받기 위한 EditText. 프로젝트 진행 중 기획 상 기본 EditText 기능만으로는 부족한 부분이 있어텍스트를 지우는 버튼이 있는 커스텀 EditText 만들게 되었다. 커스텀 EditText를 사용하는 방법에 대해 정리해 본다. 1. 기능 소개(요구사항)InputEditText는 다음과 같은 기능을 갖는 커스텀 EditTex텍스트가 있을 때만 표시되는 지우기(X) 아이콘포커스 여부에 따른 배경 변경커스텀 폰트 적용 (Pretendard Variable)힌트 색상 및 텍스트 사이즈 설정외부에서 setOnFocusChangeListener, setOnTouchListener 오버라이딩 가능2. 구현 코드public class InputEditText extends Ap.. [안드로이드]FCM 에서 PendingIntent가 재사용되는 문제와 해결 방법 FCM 관련 기능을 개발 중 서버에서 전달받은 RemoteMessage값이 변경되지 않는 문제가 발생하여 소스를 수정을 하게되었다.이 현상은 앱에서 Firebase Cloud Messaging(FCM)을 통해 푸시 알림을 수신하고, 알림을 탭했을 때 특정 데이터를 액티비티로 전달하는 기능을 구현하다 보면, 발생하는 문제이다.1. 문제 상황PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE);이렇게 만들었더니, 푸시 알림을 여러 번 받아도 처음 받은 메시지의 데이터만 전달되고, 그 이후 알림은 클릭해도 이전 데이터가 유지되는 현상이 발생하였다.❓ 왜.. [Jetpack Compose] 기존 UI방식과 다른 점? 기존 명령어 방식에 익숙한 개발자로서 선언형 UI에 개념을 이해하는데 어려움이 있어 정리하는 차원에서 글을 작성해본다.1. 선언형 UI vs 명령형 UI의 차이Jetpack Compose의 가장 큰 특징은 선언형(Declarative) UI 방식이라는 점이다. 기존 Android View 시스템은 명령형(Imperative) 방식이며, 이 두 가지는 단순히 코드 스타일만 다른 것이 아니라, UI 구성과 상태 관리 개념이 다르다. 2. 선언형 UI의 핵심은 “현재 상태에 따라 UI를 그린다.” Compose에서는 UI는 상태(state)에 기반해 선언하고, 상태가 바뀌면, 해당 UI는 자동으로 다시 그려진다 (recomposition).기존 안드로이드처럼 View를 직접 찾아서 조작하지 않고, UI는 항상.. 컴포즈 (Jetpack Compose) Android 앱 개발 방식은 오랜 시간 동안 XML 기반 UI로 유지되어 왔지만 Jetpack Compose의 등장으로 안드로이드 UI 개발 패러다임이 급격히 변화하고 있다.Jetpack Compose의 기본 개념, 상태 관리 방법, 그리고 실제 프로젝트에 Compose를 도입에 대해 글로 작성해 본다1. Jetpack Compose란?Jetpack Compose는 구글이 공식 지원하는 선언형 UI 프레임워크로, Android 앱에서 UI를 더 간결하고 직관적으로 구성할 수 있다.주요 특징XML이 필요 없음: 모든 UI는 Kotlin 코드로 작성재사용성 향상: Composable 함수 단위로 UI 모듈화 가능상태 기반 UI: 상태가 변경되면 자동으로 UI가 업데이트됨기존 View 시스템과의 호환: 필요.. [VirtualBox] 오류 해결방법(VT-x is not available (VERR_VMX_NO_VMX)) 가상 머신을 구동하려고 VirtualBox를 실행했는데, 아래와 같은 오류 메시지가 떠서 당황을 했다. Error: VT-x is not available (VERR_VMX_NO_VMX) 이 오류는 꽤 흔하게 발생하는 문제로 대부분 CPU 가상화 기술(VT-x 또는 AMD-V)이 비활성화된 것이 원인이다. 1. 오류 상황 예시가상 머신을 실행하려고 하면 아래와 같은 메시지가 나타난다.Failed to open a session for the virtual machine.VT-x is not available (VERR_VMX_NO_VMX). 2. 주요 원인BIOS/UEFI에서 VT-x가 꺼져 있음대부분의 PC는 기본적으로 VT-x가 꺼져 있을 수 있음Hyper-V 등 다른 가상화 도구가 자원 점유 중W.. [안드로이드] 딥링크에 대하여.. Manifest 설정부터 푸시 연동까지 한 번에 이해하기 1. 딥링크란?딥링크(Deep Link)는 외부에서 앱의 특정 화면으로 직접 진입할 수 있는 링크이다예를 들어, 웹에서 myapp://login을 클릭하면 앱이 실행되고 로그인 화면이 바로 열리는 방식을 말한다. 2. 기본 딥링크 설정 방법(AndroidManifest.xml 설정) 3. 테스트 방법여러가지 방법이 있겠지만, 내가 테스트한 방법은 "myapp://example" 이라는 문구를 QR코드로 만들어 카메라로 촬영하는 방법이다. @Overrideprotected void onCreate(Bundle savedInstanceState) { .. 이전 1 2 3 4 ··· 6 다음