Android WorkManager 사용하기


사용 버전: Android Studio 4.0.1

사용 언어: Kotlin 1.3.72




안드로이드 WorkManager 사용하기를 해보겠습니다.





WorkManager는 앱의 기능을 휴대폰 Background에서 작동되도록 만들어줍니다.



WorkManager로 설정하는 작업에는 한 번만 실행하는 작업과 주기적으로 실행하는 작업이 있습니다. 이번 시간에는 주기적으로 작동하는 작업에 대해서 다루어 보겠습니다.



먼저, dependencies를 추가합니다.



app 용 build.gradle에 추가합니다.





저는 kotlin과 coroutines만 사용하기 때문에 아래처럼 등록했습니다.



Sync Now를 누릅니다.

Rebuild를 해줍니다.



work라는 패키지 폴더를 만들고 안에 class를 하나 만듭니다. 저는 RefreshDataWorker로 만들었습니다.






Context와 params를 넘겨주고, CoroutineWorker를 상속합니다.

그리고 doWork를 override 합니다.






doWork 안에 앱이 꺼져있는 동안에 작업할 내용을 적습니다.

저는 인터넷으로 데이터를 받고 데이터베이스에 집어넣는 작업입니다.

try, catch를 사용합니다.





Result.retry()는 작업 실패 시, 다시 작업을 시행하라라는 뜻입니다.

Result.failure()는 작업이 실패했다는 뜻입니다.

Result.success()는 작업이 성공했다는 뜻입니다.



companion object를 추가합니다.

패키지 이름을 적어주세요.






Application을 상속받은 class를 하나 만듭니다.

저는 RestAreaApplication을 만들었습니다.

Application은 다른 Class보다 먼저 생성되어 시작됩니다.





CoroutineScope를 정의하고, delayedInit()을 정의합니다. Init을 Main Thread가 아닌 Default에서 작동하도록 해서, UI를 불러오는 것을 막지 않게 합니다.


onCreate를 override 해서 정의한 delayedInit을 부릅니다.











Background에서 작동할 때의 제약 조건을 추가합니다.

constraints에 제약조건을 적습니다.

setRequiresDeviceIdle은 기기가 쉬고 있을 때입니다.

setRequiresBatteryNotLow는 기기의 건전지가 충분할 때입니다.

setRequiredNetworkType은 네트워크 연결 타입을 설정합니다.

NetworkType.CONNECTED는 인터넷이 연결되었을 때라는 뜻입니다.

NetworkType.UNMETERED는 와이파이 연결을 의미합니다.






PeriodicWorkRequestBuilder는 반복되는 작업을 의미합니다.

최소 반복 시간은 15 분입니다.


enqueueUniquePeriodicWork는 중복되지 않은 이름의 작업을 실행하게 합니다.

WORK_NAME을 넣어줍니다.

ExistingPeriodicWorkPolicy.KEEP은 작업이 실행되지 못하고 있을 시, 새로운 작업 불러오지 않고 대기하고 있는 이전의 작업을 실행합니다.

반복 주기를 넣습니다.








AndroidManifest.xml

android:name을 추가합니다.






14 시  00 분, 15 시 26 분에 성공하였고, 나머지는 다 실패하였네요. 실패하면 보시다시피, 설정한 15 분이 되기 전에 다시 시도를 합니다.




끝.



카테고리: Android

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()