Android
-
Android) RxJava 메모리 누수 방지 - Disposable, CompositeDisposable 비교Android 2020. 8. 4. 19:50
메모리 누수(Memory Leak)란? 참조가 완료되었지만 할당한메모리를 해제하지않아서 발생. 특히 강한 참조의 경우 가비지 컬렉터가 메모리에서 객체를 제거할 수 없으므로 라이프사이클에 맞게 참조를 끊어야 사용하지 않는 메모리를 해제할 수 있습니다. 메모리누수는 시스템 전체 성능에 영향을 미치므로 중요하게 관리해야 합니다. Disposable 인터페이스를 이용하여 명시적으로 자원 해제 - 라이프사이클에 맞게 해제. CompositeDisposable 클래스 이용 - 생성된 모든 Observable 을 안드로이드 라이프사이클에 맞춰 한번에 모두 해제할 수 있습니다. clear(), dispose() 함수 모두 Disposable객체를 삭제한다는 점은 같습니다. 그러나 clear() 함수의 경우 계속 Dis..
-
Android) LiveData, MutableLiveData 특징과 차이점Android 2020. 8. 4. 16:00
Live data life cycle의 생명주기를 따릅니다. LifecycleOwner의 상태가 STARTED와 RESUMED로 활성화 상태일 때만 옵저버에게 데이터 변화를 알려줍니다. 상태가 Destroyed 변경되면 자동으로 live data도 소멸 -> memory leak등의 문제 신경 안써도됩니다. ViewModel에서 사용되도록 설계되었으므로 액티비티, 프래그먼트가 재실행해도 ViewModel은 소멸되지 않으므로 LiveData 또한 소멸 되지않습니다. 또한 life cycle이 활성화 되었을때만 데이터 변화 알려주므로 형식적인 코드(boiler plate)가 줄어듭니다. MutableLiveData LiveData를 상속하고 LiveData.setValue와 LiveData.postValue..
-
Android) AAC - ViewModel 예제Android 2020. 8. 4. 15:42
ViewModel 우선 MVVM 패턴의 ViewModel과는 다른 개념입니다. MVVM의 ViewModel은 마이크로소프트에서 처음 발표했는데, 모델과 뷰 사이의 데이터를 관리하고 바인딩 해주는 역할을 합니다. 구글에서 발표한 AAC(Android Architecture Component)의 ViewModel은 아래 사진과 같이 액티비티의 생명주기에 분리시켜 ViewModel Scope의 생명주기를 따릅니다. Activity 재생성, Rotation 같은 Configuration 변경에 영향을 받지 않습니다. ViewModel은 View에 대해서 알지 못하며 UI에 독립적이라고 볼 수 있습니다. 그래서 액티비티가 재실행되어도 데이터가 소멸되지 않습니다. 가장 좋은 예제로 안드로이드의 상태 변경의 예제를 ..
-
Android) Kotlin에서 TextView 색상 바꾸기Android 2020. 7. 29. 16:06
보통 클릭 같은 이벤트를 주었을 때, textView의 색상을 바꾸고 싶어서 아래와 같이 코드를 작성했습니다. 하지만, 색상이 변하지 않았습니다. 두번째 방법으로 안드로이드에서 제공하는 컬러를 가져와서 변경을 시도했을 때, 색상의 변화가 있었습니다. 하지만 안드로이드에서 제공하는 컬러말고 내가 원하는 컬러나, 커스텀 컬러를 사용하고 싶을 땐 어떻게 해야 할까요? 아래와 같은 코드를 작성하면 가능합니다. getColor의 인자로 context를 주고, 뒤에 원하는 색상을 넣으면 됩니다.
-
Android) WebView 에러 net::ERR_CLEARTEXT_NOT_PERMITTEDAndroid 2020. 7. 16. 18:40
안드로이드에서 웹뷰를 띄우고 웹뷰의 다른 경로로 이동할 때 흔히 발생하는 에러입니다. 1. res/xml/network_security_config.xml 추가 첫번째 방법은 웹뷰를 검색하고 싶은 도메인을 지정하는 방법입니다. -> 위의 xml을 추가해준 다음 manifest의 application에 networkSecurityConfig로 xml을 추가해줍니다. cleartextTrafficPermitted 속성이 true일 경우 동작을 합니다 2. AndroidManifest.xml 에서 application 의 usesClearTextTraffic 속성 추가. -> 첫번째 방법 같은 경우 일일이 도메인을 지정해줘야 해서 귀찮기 때문에, 모든 URL을 허용하는 방법입니다. 참고로 minSdkVesri..
-
Android) Glide Module 에러 대처법Android 2020. 7. 15. 19:32
Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored mvvm 패턴으로 Data Binding으로 코드를 작성중에 위와 같은 워닝이 나왔습니다. 앱은 실행이 되지만, 저런 워닝이 뜨면 왠지 없애고 싶은 생각이 듭니다. 우선 builde.gradle 에 glide와 관련된 gradle을 추가..
-
안드로이드) kotlin - val, const, const val 비교Android 2020. 6. 25. 20:42
const 함수나 어떤 클래스의 생성자에게도 결코 할당 될 수 없고, 오직 문자열이나 기본 자료형으로 할당되어야 합니다. 그래서 const로 선언 하면 클래스의 프로퍼티나 지역변수로 할당 할 수 없습니다다. 일반적으로 companion object 안에 상수로 선언. const val 컴파일 시간에 결정되는 상수. (컴파일 : 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어코드로 변환 되어 실행 가능한 프로그램이 됨) val 런타임 시간에 할당된다. (런타임 : 컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 의미) companion object 안에 const val 로 선언한 변수는 자바에서의 static final 형태와 같습니다.
-
안드로이드) equals 와 == 비교Android 2020. 6. 25. 20:35
equals 메소드 equals()는 메소드. 객체끼리 내용을 비교, 즉 equlas 메소드는 비교하고자 하는 대상의 내용 자체를 비교 == 비교를 위한 연산자. 비교하고자 하는 대상의 주소값을 비교. 가장 많이 사용하는 데이터 값이 null인지 체크할 때 equals와 == 중에 어느 것을 써야 할까요? null은 객체가 아니라서 equals 메소드가 없습니다. 즉 equals는 메소드이므로 null 참조에서 호출하려고 하면NullPointerException이 발생합니다. 추천 방식 -> if("".equlas(userInfo.get("Owner") || userInfo.get("Onwer") == null)