본문 바로가기

Programming

(37)
20.12.03(목) TIL - FCM 푸시가 왔을 때 액티비티에서 이벤트 처리하는 법 요구사항 FCM 푸시알람이 오면 사용자가 알람을 클릭하지 않더라도 액티비티가 이동한다. 문제해결과정 LiveData를 사용하는 것까지는 좋았는데.. FirebaseMessagingService 클래스 내부에 public 으로 변수를 선언해도 접근이 안 되었다. 열심이 구글링한 결과 핵심은 싱글톤!! 싱글톤 클래스에 livedata를 선언해야 서비스 클래스와 액티비티(프래그먼트) 클래스 모두에서 접근이 가능했다. 구현내용 1. LiveData를 포함한 싱글톤 클래스 Event를 생성한다. object 키워드로 클래스를 정의하면, 싱클톤 패턴이 적용되어 객체가 한번만 생성된다. 2. FirebaseMessagingService 클래스의 onMessageReceived 메소드에 값을 업데이트해준다. onMes..
[git] 여러 개의 원격 저장소 연결하기 A에 있는 프로젝트를 B에도 저장하고 싶을 때 1. 새로운 저장소를 추가해 준다. git remote add "B저장소이름" "주소" 2. 원격 저장소 목록 확인 git remote -v 3. orgin에 있는 소스를 새로운 저장소로 push git push "B저장소이름" master
[RxJava] 리액티브 프로그래밍(Reactive Programming)이란? RxJava는 자바에서 리액티브 프로그래밍을 구현하는데 사용하는 라이브러리이다. 따라서 RxJava를 이해하기 위해 리액티브 프로그래밍이 무엇인지 알아보자! 리액티브 프로그래밍(Reactive Programming)이란? - 데이터를 통지하는 생산자를 생성하고, 통지한 데이터를 소비자가 받아 처리하는 방식 - 데이터가 통지될 때마다 관련 프로그램이 반응하여 데이터를 처리하는 프로그래밍 방식이다. 예를 들어 GPS 위치 정보가 변경될 때의 상황을 가정해보자. 이동하여 위치 정보가 변경될 때마다 데이터를 전송하고 이동을 멈추면 데이터 전송도 중지하는 것처럼 생성되는 데이터를 한 번에 보내지 않고 각각의 데이터가 생성될 때마다 순서대로 보낸다. 이러한 데이터 흐름을 데이터 스트림이라고 한다. - 데이터 스트림..
[Android][Error] java.lang.IllegalStateException: Not allowed to start service Intent startService() 이 코드에서 에러가 났다. 개발자 문서를 보면 아래와 같은 설명이 있다. developer.android.com/about/versions/oreo/background?hl=ko#services 백그라운드 실행 제한 | Android 개발자 | Android Developers Android 8.0 이상을 대상으로 하는 앱에 대한 새로운 백그라운드 제한. developer.android.com - 앱이 백그라운드에 있는 동안 포그라운드 서비스를 생성해야 하는 경우, startService() 대신 startForegroundService() 메서드를 사용하세요. - 사용자가 인지할 수 있는 서비스의 경우에는 포그라운드 서비스로 만들어야 합니다. 예를 들어, 오디오를 재생하는 서..
[Android][Error] MutableLiveData의 setValue와 postValue의 차이 (IllegalStateException: Cannot invoke setValue on a background thread) 공통점 - MutableLiveData의 값을 변경시킬 수 있는 메소드 차이점 setValue() - 값을 set하는 메소드이다. livedata를 구독하고 있는 액티브한 옵저버가 있을 때 setValue()로 값을 변경해주면 옵저버에게 전달(dispatch)된다. - 메인 스레드에서 호출되어야 한다. postValue() - setValue처럼 값을 바로 set하지 않고 주어진 값을 set하라는 task를 메인스레드에게 전달해준다. - 백그라운드에서 진행된다. - 따라서 postValue한 다음 바로 getValue를 호출할 경우 변경된 값을 받아오지 못할 수도 있다. developer.android.com/reference/androidx/lifecycle/MutableLiveData#postValu..
[Android] NDK를 이용하여 C/C++ 를 추가 2020 네이버 테크 콘서트 강의를 요약 정리해 보았다. # NDK란? - JNI를 이용하여 안드로이드에서 네이티브 코드를 구동할 수 있게 해주는 development kit - 다양한 아키텍처에 대한 cross compiler를 가능하도록 하는 것이 핵심 기능 - 이외에도 안드로이드 SDK를 지원하기 위한 시스템 헤더 및 라이브러리 제공 # NDK 사용하는 이유 - 성능 - 딥러닝 추론, 이미지 처리 등 높은 성능을 필요로 하는 경우 - 딥러닝 프레임워크는 NDK 사용하여 빌드 (tf-lite, onnxRuntime) - 코드 재사용 - C++모듈을 aOS iOS 동시 사용 가능 - 하드웨어 제어 # NDK 단점 - 이식성 결여) 언제나 모든 플랫폼에서 사용 가능한지를 체크해야 한다 - 안정성 결여) ..
20.09.11(금) TIL 1. 락커가 잠겼는데 서버에 이용시작 등록이 되는 경우가 있고, 락커가 열렸는데 서버에 이용시작 등록이 되지 않는 경우가 있다. 후자의 경우 무료로 자전거를 이용하게 되므로 큰 문제이다! 일단 블루투스의 연결상태나 송수신 상태를 잘 파악하고 에러 처리하는 게 중요하다. 일단 세세하게 에러 상황을 나누어 보았다. 1) 블루투스 연결 실패시 2) 연결 성공후 데이터 전송 실패시 3) 데이터 전송 성공후 수신실패시 1은 현재 여러가지 상황에서 에러처리하고 있고 사용자에게도 블루투스 연결이 안된다고 안내가 간다. 2는 throwable로 에러를 받아 로그를 찍고 있다. 3도 연결이 된 이상 송수신은 문제가 없이 데이터 전송하면 거의 0.3초만에 응답이 왔다.. 2,3은 지금까지 개발하고 테스트하면서 발생한 적은..
20.09.10(목) TIL 1. 사용자가 생기니 crashlytics에 버그가 쌓인다ㅎ 정확한 플로우를 알 수가 없어 테스트하기가 힘들지만 개발과정에서 예상하지 못했던 문제들을 발견해서 다행이다. 한편으로는 이런 에러도 발생할 수 있구나하는 신기한 마음도 든다. 근데 업무가 많은 상황에서 우선순위를 잡기가 힘들다. 2차 개발, 기획팀의 추가 요청, 서버 보안적용 요청, 블루투스 안정화 등등.. 일단 카톡도 죽는데.. 나 혼자 완벽하게 하는 것은 현실적으로 무리같다. 콘솔상의 비정상 종료 미발생 통계가 97-98 수준에서 급하고 자주 발생하는 에러부터 해결하는 것으로! 2. 로그인/회원가입 시 핸드폰 번호를 입력하는데 에뮬레이터에서 구분자(-)가 나타나지 않는 현상이 발생했다. 처음에는 에뮬레이터 자체의 문제인가? 디바이스가 달라서..