안드로이드 앱 개발 프로젝트1

12일차 - AsyncTask가 맞나?

원준킹 2021. 1. 22. 20:48

- 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