카테고리 보관물: Android

안드로이드 에뮬레이터 화면 깜빡임 없이 녹화하기

개요

안드로이드 앱을 개발하고 동작화면을 녹화해야 하는 경우가 있습니다. 실제 기기의 화면을 다른 기기로 녹화하기도 하고 에뮬레이터의 화면을 녹화하기도 합니다. 필자는 주로 에뮬레이터 화면을 녹화해서 동영상을 만듭니다.

에뮬레이터에서 녹화는 다음 이미지와 같이 Extended Controls 의 Record and Playback 메뉴를 사용하면 됩니다.

Extended Controls 화면

얼마 전 에뮬레이터에서 앱 동작영상을 녹화해서 재생해 보니 화면이 심하게 깜빡이면서 알아볼 수 없는 정도가 되었습니다.

해결

검색을 해보니 같은 현상을 접한 개발자들이 있었습니다. 먼저 에뮬레이터의 설정파일을 변경하라는 내용이 있었습니다. 필자의 경우 설정파일의 내용은 에뮬레이터가 다시 시작되면 초기화되어 의미가 없었습니다.

성능 옵션을 조정해 보라는 글도 있었습니다. 에뮬레이터 그래픽 옵션을 다음 이미지와 같이 Hardware – GLES 2.0에서 Software – GLES 2.0 으로 변경하면 속도는 조금 느려지지만 화면 녹화는 깜빡임 없이 제대로 됩니다. 개발 환경에 따라서는 위와 반대로 설정해야 될 수도 있습니다. 원래 참조했던 게시물에서는 Hardware – GLES 2.0 로 변경해서 깜빡임없이 녹화가 되었다고 합니다.

에뮬레이터 그래픽 옵션

Android postDelayed 순서대로 실행

개요

안드로이드 앱 개발 시 일정시간 지연 후 무엇인가를 실행해야 하는 경우가 있습니다. postDelayed 를 이용하면 가능합니다. 자세한 설명은 이곳에서 확인하실 수 있습니다. 예제 코드는 다음과 같습니다.

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, delay)

delay 는 Milisecond 단위이고 1000 이 1초에 해당합니다.

postDelayed 순서대로 실행

그런데 가끔 작업을 일정한 시간이나 불규칙한 시간 간격으로 실행해야 하는 경우가 있습니다. 예를 들어 1초, 3초 후 실행한다고 가정해 보겠습니다. 아마 다음과 같이 코드를 작성하게 될 것 입니다.

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 1000) //1초 후 실행

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 3000) //3초 후 실행

실제로는 의도한 대로 동작하지 않습니다. 앞의 코드가 끝난 후 뒤쪽의 코드가 실행되는 것이 아니기 때문입니다. 1초 후 실행은 정상적으로 동작합니다. 뒤쪽의 코드는 실행시간을 기준으로 4초 후가 아닌 3초 후 실행됩니다.

특정한 시간을 기준으로 누적되는 시간으로 적용해 주어야 의도한 대로 실행됩니다. 다음과 같은 코드형태가 됩니다.

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 1000) //1초 후 실행

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 4000) //위쪽 코드 실행 후 3초 후 실행

이번글에서는 postDelayed를 순서대로 실행하는 방법을 알아보았습니다.