Android
-
Android 12 - Notification trampoline restrictionsAndroid 2021. 10. 25. 09:23
안드로이드 12의 주요 업데이트 중 하나인데, 노티를 클릭해서 서비스나 브로드캐스트를 실행하고 다시 엑티비티를 실행하는 흐름을 제한하는 것이다. 대신 펜딩인텐트에서 바로 엑티비티를 실행하면 된다. https://proandroiddev.com/notification-trampoline-restrictions-android12-7d2a8b15bbe2 Notification trampoline restrictions-Android12 Did you ever notice? proandroiddev.com
-
Android WorkManager 사용법Android 2021. 5. 4. 17:53
개요 안드로이드의 프로세스는 Foreground와 Background로 나뉩니다. Foreground는 유저가 앱과 화면에서 인터랙션을 할 수 있는 상태입니다. Background는 유저가 앱과 화면에서 인터랙션 하지않아도 실행되는 상태입니다. 앱을 종료하는 방식은 두가지 입니다. 뒤로가기 해서 종료하거나, 모두 보기에서 앱을 날리는 두가지 경우입니다. 여기서 뒤로가기를 해서 앱을 종료하는 경우는 프로세스를 완전히 종료하는 것이 아니라 Background로 남기는 것입니다. 반면 모두 보기를 해서 종료하면 프로세스 자체가 종료가 되는 것이죠. 다운로드를 하거나 음악을 실행시키는 것과 같이, 앱은 다양한 이유로 Background에서 Task를 실행합니다. 안드로이드에서는 이러한 Background Tas..
-
Two-way Binding 사용법Android 2020. 12. 22. 23:18
개요 데이터 바인딩은 MVVM에서 없어서는 안되는 요소입니다. MVVM에서 뷰와 뷰모델을 느슨하게 결합하는데 데이터 바인딩이 반드시 필요하기 때문입니다. 반드시 뷰모델의 데이터와 결합한다기보다는 앱의 데이터 요소 자체를 UI 요소에 결합시키는 것이 데이터 바인딩인데, 일반적으로는 뷰모델의 데이터가 변경되면 XML의 데이터도 갱신되게 되는 로직을 많이 구성합니다. 일반적으로 뷰모델의 데이터가 변경되면 XML의 데이터가 갱신되는 단방향적인 데이터 바인딩과 반대로 XML의 데이터가 변경되면 뷰모델의 데이터가 갱신되는 데이터 바인딩은 없을까요? EditText에서 값이 입력됨에 따라 뷰모델의 데이터가 알아서 변경되는 로직은 구성하기 어려울까요? 양방향 데이터 결합인 Two-way Binding이 해답이 될 수 ..
-
onBackPressed와 finish의 차이Android 2020. 12. 4. 11:28
시작하기 전 최근 프로젝트를 진행하면서 한가지 궁금한 사항이 생겼습니다. 뒤로가기 아이콘을 눌러서 콜백이 호출됐을 때 엑티비티를 종료하고 뒤로가기 이벤트를 실행시키고 싶었습니다. 엑티비티를 종료하는 방법은 대표적으로 두가지가 있습니다. onBackPressed()와 finish(). 저는 습관처럼 onBackPressed를 사용하려고 하다가 갑자기 finish와는 어떤 차이가 있고 어떤걸 쓰는게 좋은지 궁금해졌습니다. 그래서 짧지만 한번 정리해보려고 합니다. Back버튼 이벤트를 처리할 수 있느냐 없느냐의 차이 Class SomeViewModel { _onBackClick: PublishSubject = PublishSubject.create() _close: MutableLiveData = Single..
-
Fragment에서 ViewBinding 사용 시 발생할 수 있는 메모리릭Android 2020. 11. 13. 12:03
Fragment에서 두 가지 생명주기 Fragment는 Activity와 다르게 조금은 다른 생명주기를 가지고 있습니다. Fragment의 고유한 생명주기를 가지고 있으면서도 자세히 보면, View와 관련된 생명주기도 가지고 있죠. 위의 이미지를 보시면 onCreateView와 onDestroyView를 가지고 있는 것을 확인할 수 있습니다. onCreate와 onCreateView라는 두가지 생명주기를 가지는데 이 둘의 차이가 무엇일까요? onCreate는 Fragment가 생성될 때, 즉 화면이 아직 보이지 않는 상태에서 실행되는 것이고, onCreateView는 화면을 구성할 때 호출되는 부분입니다. 그래서 직접적으로 화면과 관련된 생명주기는 onCreateView와 onDestroyView가 되는..
-
변수의 동시성 제어에 관한 이슈 및 해결Android 2020. 10. 27. 11:01
개요 코드를 작성하다보면 여러가지 고려할 사항이 있는데요. 그 중 하나가 동시성에 관한 문제입니다. 특히 멀티 스레드 환경에서는 더욱 주의해야하는 문제인 동시성이란 무엇일까요? 동기화와 동시성 문제 멀티 스레드 환경에서는 데이터에 대한 동시 데이터 접근 문제가 발생할 수 있습니다. 하나의 데이터에 대해 특정 스레드가 쓰는 동작을 한다면 다른 스레드가 읽는 등의 동작을 할 수 있는 것이죠. 이러한 현상의 원리는 프로세스와 스레드의 구조와 관련이 있습니다. 프로세스들 간에는 이미 OS가 별도의 프로그램으로 동작하도록 알아서 처리하고 있습니다. 프로세스는 메모리에서 고유한 주소값을 가지고 있고, 다른 프로세스가 가지고 있는 주소를 침범할 수 없습니다. 반면, 스레드는 프로세스 안에 여러개가 존재합니다. 그리고..
-
Gson을 통해 API Response를 Enum으로 매핑하기Android 2020. 9. 25. 19:02
글을 시작하기 전에 안녕하세요, 블로그에는 굉장히 오랜만에 글을 게시하는 것 같네요. 최근 얼마전 안드로이드 개발자로 인턴을 시작하면서 시간이 많이 나지 않아 블로그에 신경을 많이 못썼던 것 같습니다. 그래도 역시 경험을 정리하는데는 블로그만한 것이 없는 것 같네요. 업무를 하면서 직면한 문제들과 해결한 경험에 대해 지속해서 포스팅 할 계획입니다. 그럼 오늘부터 시작해볼까요? Adapter에 지나치게 많은 코드 (보안을 위해 코드는 비슷하게 작성하되, 일부 수정했습니다.) class ViewHolder extends RecyclerView.ViewHolder { public void bind() { binding.setPoint(point); binding.createdAt.setText(changeTo..
-
[안드로이드 9.0 프로토콜 접속 변경사항] CLEARTEXT communication to XXXX not permitted by network security policyAndroid 2020. 7. 24. 00:40
개요 얼마전 국방부 공모전을 나가기 위해 제작한 군인 커뮤니티 플랫폼 서비스인 군머니티를 제작하던 중 예기치 못한 오류가 발생했습니다. 테스트 기기에서는 정상적으로 실행되던 앱이 다른 특정 유저들에게선 버튼 클릭이나 전체적인 앱 실행이 안되는 현상이 발생하는 것이었죠. 급하게 버그를 수정하기 위해 원인을 찾고 있었으나, 저의 테스트 기기에선 방법을 찾을 수 없었습니다. 알고보니, 제 테스트 기기들은 OS 9.0보다 아래였기 때문에 에러가 생기지 않았던 것인데요. 애뮬레이터에서 OS 9.0을 가진 기기를 생성하고 실행했을 때 다음과 같은 에러 문구를 발견할 수 있었습니다. CLEARTEXT communication to XXXX not permitted by network security policy 처음..