Android Architecture Component – LiveData

개요 LiveData 는 Data의 변경을 관측할 수 있는 Data Holder 클래스 입니다. 일반적인 Observable과는 다르게 LiveData는 생명주기를 알고 있습니다.(Lifecycle-Aware) 액티비티나, 프레그먼트, 서비스 등과 같은 컴포넌트의 생명주기(Lifecycle)를 존중하고 그에따라 LiveData는 활성상태(active)일때만 데이터를 업데이트 합니다. 활성상태란 STARTED 또는 RESUMED를 의미합니다. Lifecycle State CREATED Created state for a LifecycleOwner. DESTROYED Destroyed state for a LifecycleOwner. 더보기…

글쓴이 Charlezz,

AAC – LiveData (의역)

LiveData LiveData는 생명주기를 알 수 있는 데이터 홀더 클래스입니다. 무슨 뜻이냐면 옵저버가 LifecycleOwner에 추가 될 수 있고, LifecycleOwner가 활성화 되어있을때 래핑된 데이터들의 수정사항에 대한 알림을 받을 수 있음을 뜻합니다. 상태가 STARTED 또는 RESUMED이면 LifecycleOwner는 활성상태 입니다. observeForever에 의해 추가된 observer는 항상 활성화 된 것으로 간주되므로 수정된 내용에 대해 항상 알림을 받을 더보기…

글쓴이 Charlezz,

AAC – ViewModel (의역)

Android Arcitecture Component – ViewModel    ViewModel 클래스는 UI  관련된 데이터를 생명주기를 고려한 방식으로 저장하고 관리하도록 설계 되어있습니다. ViewModel 클래스를 사용하면 화면 회전과 같은 구성 변경 사항에도 데이터가 그대로 유지 된다. Note : ViewModel을 안드로이드 프로젝트로 가져오려면 프로젝트에 AAC 라이브러리를 추가해야합니다. 안드로이드 프레임워크는 액티비티와 프레그먼트 같은 UI 컨트롤러의 생명주기를 관리합니다. 프레임워크는 더보기…

글쓴이 Charlezz,

(AnimatedVectorDrawable) Turn Record Button into StopButton

AnimatedVectorDrawable? AnimatedVectorDrawable 클래스는 VectorDrawable, ObjectAnimator 또는 AnimatorSet과 함께 동작하는 애니메이션 효과 주는 클래스입니다 API25레벨 이전에는  UI 쓰레드에서 동작했던것과는 달리, API 25레벨부터는 RenderThread에서 동작합니다. 그래서 UI 쓰레드에 작업량이 많아도 동작이 매우 부드럽습니다. UI쓰레드가 응답하지 않아도 UI쓰레드가 다음 프레임을 처리할수 있을 때까지 계속 애니메이션을 적용 할 수 있습니다. 따라서 RenderThread 가 활성된 더보기…

글쓴이 Charlezz,

Screen Recorder 만들기

ScreenRecorder 화면 녹화 프로세스 비디오 코덱으로 부터 얻은 Surface를 통해 VirtualDisplay를 생성하였다면, 비디오코덱의 출력버퍼로부터 부호화된 프레임 버퍼를 얻을수 있다. AudioRecord로 부터 얻은 오디오 버퍼(PCM)를  오디오 코덱의 입력버퍼에 넣고 큐에 넣는다면, 출력버퍼로부터 부호화된 오디오 버퍼를 얻을수 있다. MediaMuxer에 비디오와 오디오트랙을 추가하고, start() 한다. muxer.writeSampleData(trackIndex, buffer) 메소드를 통해 먹싱을 한다. 녹화를 중지하고 더보기…

Statusbar 에서의 Notification Icon

노티피케이션 제작 가이드 : https://developer.android.com/guide/topics/ui/notifiers/notifications.html?hl=ko 노티피케이션 아이콘 디자인 가이드 : https://material.io/guidelines/patterns/notifications.html?hl=ko   롤리팝이후 메테리얼 디자인이 도입되면서, 노티피케이션 아이콘은 반드시 흰색이여야 하며 alpha 값 조절을 통해 아이콘의 디자인을 결정해야 한다. Notification noti = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.icon_rounded) .setContentTitle(“제목”) .setContentText(“내용”) .setColor(ContextCompat.getColor(this, R.color.colorAccent)) .build(); nm.notify(1, noti); setSmallIcon()은 노티피케이션의 아이콘을 결정하며, setColor()에 의해 흰색이였던 부분을 단색으로 더보기…

How to solve momory leak of handler

The Lint feature has been enhanced, causing a lint (warning) on handler public class WeakRefHandler extends Handler { private final WeakReference<IHandlerMessage> reference; public WeakRefHandler(IHandlerMessage t) { reference = new WeakReference<IHandlerMessage>(t); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); IHandlerMessage iHandlerMessage = reference.get(); if (iHandlerMessage != null) { iHandlerMessage.handleMessage(msg); } } 더보기…

글쓴이 Charlezz,

Advanced Android Animation with Lottie

lottie는 안드로이드, iOS , 웹에서 쓸수 있는 라이브러리다. Adobe After Effects 로 만들어진 애니메이션을 Bodymovin 이라는 플러그인을 써서 json 형태로 변환시킨뒤 각 플랫폼에 맞게 쓸 수 있게 해주는 녀석이다.                                       로티에 대한 설정은 더보기…

글쓴이 Charlezz,

GLSurfaceView와 Fragment Animation 문제

같은 화면에서 GLSurfaceView, Fragment를 중첩해서 쓰는 경우에 생기는 문제가 있다. popBackStack 또는 remove, replace 등의 프레그먼트를 제거할때 애니메이션 효과를 추가하는경우에 레이아웃이 어긋나거나 애니메이션이 제대로 표현되지 않는 문제가 있다. 이런경우 프레그먼트객체를 미리 만들어두고 add를 미리 해둔 뒤 프레그먼트 매니저에서 show(), hide() 로 뷰를 살려두면 애니메이션은 잘 작동하나.. 보이지않는 프레그먼트까지 뷰객체를 살려놔야하므로 더보기…

글쓴이 Charlezz,