ExoPlayer는 구글에서 만든 동영상 재생 라이브러리이다. MediaPlayer보다 훨씬 안정적이고 다양한 기능을 지원하기 때문에 유튜브나 인스타그램 등 많은 곳에서 ExoPlayer를 사용한다. 그래서 진행중인 프로젝트에서 ExoPlayer를 사용해 동영상이 준비되기 전에는 썸네일 이미지를 보여주고, 준비가 완료되면 자연스럽게 동영상을 재생하려고 했는데 재생 직전 검은 화면으로 깜빡이는 현상을 확인했다. 이번 포스팅에서는 이 문제의 원인과 해결 방법을 공유하려고 한다. ExoPlayer는 동영상을 재생하는 Player가 있고, 화면에 보여주는 PlayerView에 Player를 등록해서 사용한다. 그런데 PlayerView는 동영상을 재생하는 View이기 때문에 background 속성이 없고, 썸..
이전 포스팅에서 RecyclerView의 아이템을 LiveData로 관리하는 방법에 대해 알아보았다. 이 때 함께 사용하면 좋은 ListAdapter에 대해 소개하려고 한다. RecyclerView를 사용하다보면 아이템을 변경할 일이 많고, 이럴 때 기존에는 notifyDataSetChanged()로 모든 아이템을 업데이트 하는 방법을 사용해 왔다. 하지만 이 방법은 아이템 개수가 많아질수록 비효율적일 수 밖에 없다. 물론 아래 notify- 메서드를 잘 이용하면 전체 데이터를 바꿀 필요가 없지만 position을 가지고 수동으로 관리해 주어야 하는 불편함이 있을 수 있고, 아이템의 정해진 순서가 없을 때는 이 기능을 사용할 수 없다. 이런 문제를 알고 구글에서는 DiffUtil이라는 매우 편리한 유틸리..
안드로이드에서 Context는 가장 많이 등장하고, 그만큼 핵심이 되는 개념이기 때문에 제대로 알고 사용하는 것이 좋다. 이번 포스팅에서는 Context의 역할 및 종류와 언제 사용하면 좋은지 알아 보려고 한다. Context란? Context는 어플리케이션 환경에 관한 전체 정보를 받을 수 있는 추상 클래스로 액티비티, 브로드캐스트, 서비스를 시작할 때도 사용되고 리소스에 접근할 때도 Context가 사용된다. 이처럼 어플리케이션과 관련된 정보에 접근하고자 하거나 어플리케이션과 연관된 시스템 레벨의 함수를 호출하고자 할 때 Context가 필요하다. 안드로이드는 어플리케이션 관련 정보를 ActivityManagerService에서 관리하고 있고, 어플리케이션과 관련된 정보에 접근하려고 할 때 해당 어플..
ViewModel의 기본적인 사용 목적은 UI Controller에서 보여줄 데이터를 관리하는 것이다. 일반적으로 ViewModel에 데이터를 LiveData로 관리하고 UI Controller가 그 데이터를 Observing 하는 구조로 만든다. 여기서 단일 데이터에 LiveData를 사용하면 문제가 되지 않지만 리스트에 LiveData를 단일 데이터처럼 적용하려고 하면 제대로 동작하지 않는다. 즉, 리스트 내부의 아이템 추가, 삭제와 같은 변경 사항이 일어나도 Observer에 등록된 콜백이 호출되지 않는다는 것이다. 위 그림의 View와 ViewModel의 관계에서 어떻게 리스트 데이터를 LiveData로 관리해서 내부 아이템의 변경사항까지 Observing 하도록 만들 수 있을까? LiveData..
안드로이드 프로젝트를 하면서 API 통신이 필요할 때 일반적으로 Retrofit 라이브러리를 사용하는데, 그 이유는 Retrofit의 응답 속도가 빠르고 구현 방법이 간단하기 때문이다. 이번 포스팅에서는 이렇게 많이 사용되는 Retrofit의 장점과 사용법에 대해 알아보려고 한다. Retrofit2 특징 Retrofit2는 Square사에서 만든 네트워킹 라이브러리로, 오래 전에 Retrofit이라는 라이브러리를 출시한 뒤 기존 라이브러리의 문제점을 개선해 현재의 Retrofit2가 만들어졌다. Retrofit2는 Retrofit의 업그레이드 된 버전이기 때문에 일반적으로 1과 2를 구분짓지 않고 Retrofit이라고 통용된다. 그렇기 때문에 포스팅 중에 Retrofit이라고 하는 것은 모두 Retrof..
이번 글은 안드로이드 부스트코스 마지막 네트워킹 강의의 내용을 정리해 보려고 한다. 이 강의는 실습이 아닌 네트워킹의 전반적인 내용을 2시간 동안 개괄적으로 훑는 강의였기 때문에 그에 맞게 내가 이해한 이론적인 내용을 주로 다룰 것이다. 강의의 개요는 아래와 같이 세 가지로 구성된다. 1. 일반 데이터 네트워킹 대부분의 업무용 앱과 일반 앱 중 서버와의 통신이 필요한 앱에 적용하는 일반적인 네트워킹 방법 Thread, AsyncTask, Gson 정리 및 Node.js를 이용한 클라우드 서버 구성 방법에 대한 요약 2. 실시간 메시징 카톡 등 실시간 메시징이 필요한 경우에 적용하는 네트워킹 방법 Socket.IO 정리 및 Node.js를 이용한 클라우드 서버 구성 방법에 대한 요약 3. 실시간 방송 동영..
안드로이드 앱을 개발하면서 이미지 파일을 다루는 일이 굉장히 흔하다. 안드로이드 앱에서 이미지 파일은 Bitmap을 이용해서 다루는데, Bitmap 객체를 이미지를 파일로 저장하고 싶을 때 Bitmap의 compress() 메서드를 이용한다. compress() 메서드 구현체는 아래와 같다. public boolean compress(CompressFormat format, int quality, OutputStream stream) {...} 여기서 첫 번째 인자로 받는 CompressFormat은 JPEG, PNG, WEBP로 3가지 종류가 있다. 두 번째 인자인 quality는 압축 정도를 나타내는데 0~100의 숫자를 넣으면 (quality)%로 압축이 된다. 마지막으로 OutputStream은 ..
이번 포스팅에서는 안드로이드 아키텍처가 어떻게 구성되어 있고, 어떤 역할을 하는지 간단하게 정리하고 가려고 한다. 이번 포스팅은 안드로이드 개발자 문서인 플랫폼 아키텍처를 참고했다. Android Platform Architecture는 다음과 같이 구성되어 있다. Linux Kernel 안드로이드 플랫폼 기반은 Linux 커널이다. 예를들어 ART에서 threading 또는 하위 수준 메모리 관리와 같은 기본 기능에 Linux 커널을 사용한다. Binder IPC - 프로세스 간 통신 Binder Thread - 앱 프로세스에 존재하는 naive thread pool (최대 16개), 다른 프로세스에서 IPC 통신 시 이 thread pool을 통해 접근 HAL (Hardware Abstraction ..
- Total
- Today
- Yesterday
- GitHub
- SQL
- 알고리즘
- RecyclerView
- Java
- 파이썬
- SQLD
- SQLiteOpenHelper
- SOCKET
- kotlin
- 프로그래머스
- Android
- 안드로이드
- gson
- python3
- Algorithm
- 부스트코스
- 내용제공자
- DiffUtil
- SQL Server
- Python
- AndroidStudio
- pecs
- MSSQL
- RuntimeException
- covariance
- 위험권한
- AsyncListDiffer
- personal access token
- ViewHolder
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |