- AsyncTask 관련 공부를 마치고 생각해보니 AsyncTask가 아니라 Service가 필요할 것 같은데...
- 내가 구상한 앱은 앱이 실행되고 메인 액티비티가 열림과 동시에 새로운 파일이 있는지 체크, 체크 중일 때 왼쪽 메뉴의 새로운 파일항목에 로딩 아이콘으로 작업 진행 중임을 나타내고 싶음.
- 그리고 작업이 완료될 시에 메뉴에 바로 몇 개의 새로운 파일이 추가됐는지 숫자로 업데이트.
- 그런데 AsyncTask로 구현하면 메인액티비티에서 작업을 실행하다 메뉴에서 '새로운 파일' 항목을 누르면 액티비티가 새로 열리고 같은 작업을 또 수행해야된다.
- Service에서 AsyncTask를 사용하여 다른 스레드에서 새로운 파일 추가 작업을 하되 실시간으로 UI를 업데이트할 수 있게끔 구현해보는 것 도전.
developer.android.com/guide/background/threading?hl=ko
백그라운드 스레드에서 Android 작업 실행 | Android 개발자 | Android Developers
모든 Android 앱은 기본 스레드를 사용하여 UI 작업을 처리합니다. 이 기본 스레드에서 장기 실행 작업을 호출하면 작업이 정지되고 응답하지 않을 수 있습니다. 예를 들어 앱이 기본 스레드에서
developer.android.com
- 아니. 파일 추가 액티비티를 별도로 만드는게 아니라 메인 액티비티에 해당 기능을 넣고 메뉴에서 '새로운 파일' fragment를 열면 액티비티를 여는게 아니기 때문에 Service는 필요 없어진다.
- Navigationdrawer를 사용할 것 같은데 fragment만 교체해주면 주기능 사용시 액티비티간 이동은 필요없음.
- 이미 파일 삽입 작업이 진행중 일땐 onPreExecute에서 파일 삽입 기능 fragment의 새로고침 버튼을 안 보이게 하고 작업 완료 후 다시 보이게 하면 됨.
- Navigationdrawer에서 AsyncTask를 사용하는 것으로 결정.
- AsyncTask로 파일 삽입 기능 구현 후 검증 완료시에 Navigationdrawer로 이전 작업 해보자.
- AsyncTask 구현 중 액티비티 클래스에 정의한 textView를 AsyncTask를 상속받은 클래스에서 참조를 못하는데 이유를 모르겠음
- 다른 자바 샘플 코드들 보면 다 알아서 참조되는데 왜 난 안될까
- 여기저기 둘러보다 꼼수같은 방법을 발견
stackoverflow.com/questions/44525388/asynctask-in-android-with-kotlin
AsyncTask in Android with Kotlin
How to make an API call in Android with Kotlin? I have heard of Anko . But I want to use methods provided by Kotlin like in Android we have Asynctask for background operations.
stackoverflow.com
- 백그라운드 작업과 UI스레드 업데이트를 같이 진행해도 되는 코드 발견 (원리는 잘 모르겠다)
- AsyncTask를 활용해서 재정의한 클래스인데 작업을 진행하며 뷰를 참조해도 잘된다..; 일단 이걸로 하다가 나중에 코틀린용 비동기 클래스인 coroutines나 알아봐야겠다.
- 구현 결과
- 새로 추가할 mp4 파일이 724개 일때 : 새로운 파일 탐색 1.5초, 데이터 삽입 작업 26.5초
- 새로 추가할 mp4 파일이 없을 때 : 파일 탐색 1.5초
- 액티비티 화면에 실시간으로 파일 이름 표시 가능
- 상당히 만족스러움
- 다만 비동기 클래스 활용을 너무 날로 먹은 것 같아서 찜찜..
- 지금까지 공부했던 스레드 지식을 쓸 곳이 없어진 느낌
- 코루틴 잠시 읽어봤는데 쉬운 것 같음
blog.yena.io/studynote/2020/04/26/Android-Kotlin-Coroutine.html
[Android][Kotlin] 코루틴(Coroutine) 사용해보기
비동기 처리를 하는 데에는 몇 가지 방법이 있다. Rx는 다양한 기능을 제공하지만 진입 장벽이 높아 학습에 오랜 시간이 걸린다. 또 오랜 기간 사용되었던 AsyncTask는 지금은 Deprecated 된데다가 구
blog.yena.io
내일 할 것
- 비동기 작업 코루틴으로 전환
- 검색 결과 표시도 비동기 작업 처리
- 혹시나 시간 남으면 NavigationDrawer 적용시켜보기
'안드로이드 앱 개발 프로젝트1' 카테고리의 다른 글
12일차 - 스레드 공부 노트2 (0) | 2021.01.22 |
---|---|
11일차 - 스레드 공부 노트 1 (0) | 2021.01.21 |
10일차 (0) | 2021.01.20 |
9일차 - 데이터 삽입 알고리즘 최적화 (0) | 2021.01.19 |
8일차 (0) | 2021.01.18 |