๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] WorkManager - ๊ธฐ์ดˆ

interfacer_han 2024. 6. 17. 20:02

#1 ์ด์ „ ๊ธ€

 

[Android] WorkManager - ๊ฐœ์š”

#1 WorkManager๋Š” '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'์˜ ๊ด€๋ฆฌ์ž WorkManager๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… - Kotlin | Android DevelopersAndroid์—๋Š” ๋ณด์žฅ๋œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์œ„ํ•œ ๋‹ค์ˆ˜์˜ ์˜ต์…˜์ด ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์˜ต์…˜

kenel.tistory.com

๊ฐœ๋… ์„ค๋ช…์— ๊ทธ์ณค๋˜ ์ด์ „ ๊ธ€์— ์ด์–ด ๋ณธ ๊ฒŒ์‹œ๊ธ€์—์„  ์‹ค์ œ๋กœ WorkManager๋ฅผ ๊ตฌํ˜„ํ•ด๋ณธ๋‹ค.

 

#2 WorkManager ์‚ฌ์šฉํ•˜๊ธฐ

#2-1 ๋ชจ๋“ˆ ์ˆ˜์ค€ build.gradle ์ˆ˜์ •

plugins {
    ...
}

android {
    ...
}

dependencies {

    ...

    // WorkManager
    val work_version = "2.9.0"
    implementation("androidx.work:work-runtime-ktx:$work_version") // Kotlin + coroutines
}

์—ฌ๊ธฐ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ชจ๋“ˆ ์ˆ˜์ค€ build.gradle์˜ dependencies { ... }์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

#2-2 Worker ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ - UploadWorker.kt

// package com.example.workmanagerbasics

import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters
import java.text.SimpleDateFormat
import java.util.Date

class UploadWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        try {
            Log.i("interfacer_han", "(${this::class.simpleName}) Started at ${getNowTime()}")

            for (i in 0..100) {
                Log.i("interfacer_han", "(${this::class.simpleName}) Progress: ${i}/100")
            }

            Log.i("interfacer_han", "(${this::class.simpleName}) Finished at ${getNowTime()}")
            return Result.success()

        } catch (e: Exception) {
            return Result.failure()
        }
    }

    private fun getNowTime(): String {
        val time = SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
        return time.format(Date())
    }
}

Worker() ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ , ํ•„์ˆ˜์ ์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜์ธ doWork()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•œ๋‹ค. ์ด ํ•จ์ˆ˜ ์•ˆ์—๋Š” ์‹ค์งˆ์ ์œผ๋กœ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ž‘์—…๋“ค ๊ฐ€๋ น ์„œ๋ฒ„์— ํŒŒ์ผ์„ Uploadํ•˜๋Š” ์ž‘์—…์ด ์•„๋‹ˆ๋ผ, ๋”๋ฏธ ์ž‘์—…๋“ค์„ ๋„ฃ์—ˆ๋‹ค. ๋˜, try { ... } catch { ... } ๋ฌธ์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ๋‚˜๋ˆ  ์ž‘์—…์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ๋„ returnํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

#2-3 Worker ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ - DownloadWorker.kt

#2-2์™€ ๋‚ด์šฉ์ด ์™„์ „ํžˆ ๋™์ผํ•˜์ง€๋งŒ, ํŒŒ์ผ ๋ช… ๋ฐ ํด๋ž˜์Šค ์ด๋ฆ„๋งŒ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

#2-4 activity_main.xml ์ˆ˜์ •

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/oneTimeButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="One Time Request"
        android:textSize="40dp"
        app:layout_constraintBottom_toTopOf="@+id/periodicButton"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/periodicButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Periodic Request"
        android:textSize="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/oneTimeButton" />
</androidx.constraintlayout.widget.ConstraintLayout>

๋ฒ„ํŠผ์ด 2๊ฐœ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ View๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด์ „ ๊ฒŒ์‹œ๊ธ€์ฒ˜๋Ÿผ, ์ฒซ๋ฒˆ์งธ ๋ฒ„ํŠผ์€ 1ํšŒ์„ฑ ์ˆ˜ํ–‰ (One Time)์„ ์œ„ํ•œ ๋ฒ„ํŠผ์ด๊ณ  2๋ฒˆ์งธ ๋ฒ„ํŠผ์€ ์ฃผ๊ธฐ์  ์ˆ˜ํ–‰ (Periodic)์„ ์œ„ํ•œ ๋ฒ„ํŠผ์ด๋‹ค.

 

#2-5 MainActivity.kt - onCreate()

// package com.example.workmanagerbasics

import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.work.WorkManager

lateinit var workManager: WorkManager

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        workManager = WorkManager.getInstance(applicationContext)

        val oneTimeButton = findViewById<Button>(R.id.oneTimeButton)
        val periodicButton = findViewById<Button>(R.id.periodicButton)

        oneTimeButton.setOnClickListener {
            setOneTimeWorkRequest()
        }

        periodicButton.setOnClickListener {
            setPeriodicWorkRequest()
        }
    }

    private fun setOneTimeWorkRequest() {
        TODO()
    }

    private fun setPeriodicWorkRequest() {
        TODO()
}

MainActivity์—์„œ ์‚ฌ์šฉํ•  WorkManager ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  onCreate()๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. #2-4์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ์ฒซ๋ฒˆ์งธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด setOneTimeWorkRequest(), 2๋ฒˆ์งธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด setPeriodicWorkRequest()๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

#2-6 MainActivity.kt - setOneTimeWorkRequest()

// package com.example.workmanagerbasics

...
import android.util.Log
import androidx.lifecycle.Observer
import androidx.work.OneTimeWorkRequest

lateinit var workManager: WorkManager

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        ...
    }

    private fun setOneTimeWorkRequest() {
        // WorkRequest ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
        val uploadRequest = OneTimeWorkRequest
            .Builder(UploadWorker::class.java)
            .build()

        // WorkManager ๊ฐ์ฒด์˜ ์ž‘์—… ํ(Job queue)์— WorkRequest ๋“ฑ๋ก
        workManager.enqueue(uploadRequest)

        // WorkInfo๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด.
        // WorkManager.getWorkInfoByIdLiveData()๋Š” LiveData<WorkInfo>๋ฅผ ๋ฐ˜ํ™˜.
        val workInfo = workManager.getWorkInfoByIdLiveData(uploadRequest.id)
        workInfo.observe(this, Observer {
            Log.i("interfacer_han", "(${this::class.simpleName}) UploadWorker's state: ${it.state.name}")
        })
    }

    private fun setPeriodicWorkRequest() {
        TODO()
    }
}

๋นŒ๋” ํด๋ž˜์Šค๋กœ WorkRequest ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ WorkerManager์— ๋„ฃ๋Š”๋‹ค.

WorkManager.enqueue(request: WorkRequest)๋กœ WorkRequest๋ฅผ WorkManager์˜ ์ž‘์—… ํ์— ๋“ฑ๋กํ•œ๋‹ค. WorkInfo๋Š” ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ LiveData์˜ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•œ๋‹ค

๋”ฐ๋ผ์„œ, WorkInfo๋ฅผ LiveData.observe()ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ž‘์—…์˜ ์ง„ํ–‰ ์ƒํƒœ(state)๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค (๋ณธ ๊ฒŒ์‹œ๊ธ€์˜ #3 ์ฐธ์กฐ).

 

#2-7 MainActivity.kt - setPeriodicWorkRequest()

// package com.example.workmanagerbasics

...
import androidx.work.PeriodicWorkRequest
import java.util.concurrent.TimeUnit

lateinit var workManager: WorkManager

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        ...
    }

    private fun setOneTimeWorkRequest() {
        ...
    }

    private fun setPeriodicWorkRequest() {
        // WorkRequest ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
        val downloadRequest = PeriodicWorkRequest
            .Builder(DownloadWorker::class.java, 15, TimeUnit.MINUTES) // ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ํ—ˆ์šฉํ•˜๋Š” PeriodicWorkRequest์˜ ์ตœ์†Œ ์ฃผ๊ธฐ๋Š” 15๋ถ„์ด๋‹ค.
            .build()

        // WorkManager ๊ฐ์ฒด์˜ ์ž‘์—… ํ(Job queue)์— WorkRequest ๋“ฑ๋ก
        workManager.enqueue(downloadRequest)

        // WorkInfo๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด.
        // WorkManager.getWorkInfoByIdLiveData()๋Š” LiveData<WorkInfo>๋ฅผ ๋ฐ˜ํ™˜.
        val workInfo = workManager.getWorkInfoByIdLiveData(downloadRequest.id)
        workInfo.observe(this, Observer {
            Log.i("interfacer_han", "(${this::class.simpleName}) DownloadWorker's state: ${it.state.name}")
        })
    }
}

#2-6์™€ ์ „์ฒด์ ์œผ๋กœ ๋น„์Šทํ•˜๋‹ค. ์„ธ๋ถ€์ ์œผ๋กœ๋Š” WorkManager ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋Œ์–ด๋‹ค ์“ฐ๋Š” ํ•จ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๊ทธ ์ค‘์—์„œ, WorkRequest์˜ ๋นŒ๋” ํด๋ž˜์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ธ์ž๊ฐ€ 1๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ 3๊ฐœ๋ผ๋Š” ์ ์ด ์ฃผ์š”ํ•œ ์ฐจ์ด๋‹ค. PeriodicWorkRequest๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ ์ฃผ๊ธฐ(period)๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ์ด ์ฃผ๊ธฐ๋งˆ๋‹ค ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น Worker๊ฐ€ ์‹คํ–‰๋œ๋‹ค (์—ฌ๊ธฐ์—์„œ๋Š” DownloadWorker). ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ํ—ˆ์šฉํ•˜๋Š” ์ตœ์†Œ ์ฃผ๊ธฐ๋Š” 15๋ถ„์ด๋‹ค.

 

#3 ์ž‘์—…์˜ ์ƒํƒœ(State)

 

WorkInfo.State  |  Android Developers

androidx.compose.desktop.ui.tooling.preview

developer.android.com

WorkInfo.state์—๋Š” BLOCKED, ENQUEUED, RUNNING, SUCCEEDED, FAIL, CACELLED์˜ 6๊ฐ€์ง€ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค.

BLOCKED๋Š” B์ž‘์—…์— ๋Œ€ํ•œ WorkInfo์„ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•  ๋•Œ, B ์ž‘์—…์˜ ์„ ํ–‰ ์ž‘์—… A๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•„์„œ ์ˆœ์„œ ์ƒ A์—๊ฒŒ ์ข…์†๋œ(= ๋’ค์— ์žˆ๋Š”) B์˜ ์‹คํ–‰์ด ์œ ์˜ˆ๋œ(≠ ์‹คํŒจํ•œ) ์ƒํƒœ๋‹ค. (์„ ํ–‰ ์ž‘์—… ๋ฐ ํ›„ํ–‰ ์ž‘์—…์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์ด ๊ฒŒ์‹œ๊ธ€ ์ฐธ์กฐ)

ENQUEUED๋Š” ์ง€์ •๋œ ์กฐ๊ฑด(์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด๋‚˜ ์ถฉ๋ถ„ํ•œ RAM ๋“ฑ)์„ ๊ธฐ๋‹ค๋ฆฌ๋А๋ผ ์ž‘์—…์ด ์•„์ง ์‹œ์ž‘๋˜์ง€ ์•Š๊ณ  ์‹คํ–‰ ๋Œ€๊ธฐ์—ด์—๋งŒ ์กด์žฌํ•˜๋Š” ์ƒํƒœ๋‹ค.

RUNNING์€ ๋ง ๊ทธ๋Œ€๋กœ ์ž‘์—…์ด ์ง„ํ–‰์ค‘์ธ ์ƒํƒœ๋‹ค.

SUCCEEDED๋Š” ์ž‘์—…์ด ์„ฑ๊ณตํ•œ ์ƒํƒœ๋‹ค
FAILED๋Š” ์ž‘์—…์ด ์‹คํŒจํ•œ ์ƒํƒœ๋‹ค. BLOCKED๊ณผ ๊ฐ™์€ ๋งฅ๋ฝ์œผ๋กœ, ์ˆœ์„œ ์ƒ์œผ๋กœ ์ข…์†๋œ ํ›„ํ–‰ ์ž‘์—…๋“ค๋„ ์ „๋ถ€ FAILED๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. BLOCKED์™€๋Š” ๋ฐ˜๋Œ€๋กœ ํ›„ํ–‰ ์ž‘์—…๋“ค์ด ์‹คํŒจ ์ฒ˜๋ฆฌ๋œ(≠ ์œ ์˜ˆ๋œ) ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์— ์œ ์˜ํ•˜์ž. (์„ ํ–‰ ์ž‘์—… ๋ฐ ํ›„ํ–‰ ์ž‘์—…์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์ด ๊ฒŒ์‹œ๊ธ€ ์ฐธ์กฐ)

CANCELLED๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์—…์„ ์ทจ์†Œํ–ˆ๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ทจ์†Œ๋œ ๊ฒฝ์šฐ๋‹ค.

 

PeriodicWorkRequest๋Š” BLOCKED, SUCCEEDED, FAILED ์ƒํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. #4-3์„ ์ฐธ๊ณ ํ•˜์ž.

 

#4 ์ž‘๋™ ํ™•์ธ

#4-1 View์˜ ๋ชจ์Šต

 

#4-2 'One Time Request' ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ์˜ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€

๋”๋ณด๊ธฐ
(MainActivity) UploadWorker's state: ENQUEUED
(MainActivity) UploadWorker's state: RUNNING
(UploadWorker) Started at 2024/06/17 12:42:04
(UploadWorker) Progress: 0/100
(UploadWorker) Progress: 1/100
(UploadWorker) Progress: 2/100
(UploadWorker) Progress: 3/100
(UploadWorker) Progress: 4/100
(UploadWorker) Progress: 5/100
(UploadWorker) Progress: 6/100
(UploadWorker) Progress: 7/100
(UploadWorker) Progress: 8/100
(UploadWorker) Progress: 9/100
(UploadWorker) Progress: 10/100
(UploadWorker) Progress: 11/100
(UploadWorker) Progress: 12/100
(UploadWorker) Progress: 13/100
(UploadWorker) Progress: 14/100
(UploadWorker) Progress: 15/100
(UploadWorker) Progress: 16/100
(UploadWorker) Progress: 17/100
(UploadWorker) Progress: 18/100
(UploadWorker) Progress: 19/100
(UploadWorker) Progress: 20/100
(UploadWorker) Progress: 21/100
(UploadWorker) Progress: 22/100
(UploadWorker) Progress: 23/100
(UploadWorker) Progress: 24/100
(UploadWorker) Progress: 25/100
(UploadWorker) Progress: 26/100
(UploadWorker) Progress: 27/100
(UploadWorker) Progress: 28/100
(UploadWorker) Progress: 29/100
(UploadWorker) Progress: 30/100
(UploadWorker) Progress: 31/100
(UploadWorker) Progress: 32/100
(UploadWorker) Progress: 33/100
(UploadWorker) Progress: 34/100
(UploadWorker) Progress: 35/100
(UploadWorker) Progress: 36/100
(UploadWorker) Progress: 37/100
(UploadWorker) Progress: 38/100
(UploadWorker) Progress: 39/100
(UploadWorker) Progress: 40/100
(UploadWorker) Progress: 41/100
(UploadWorker) Progress: 42/100
(UploadWorker) Progress: 43/100
(UploadWorker) Progress: 44/100
(UploadWorker) Progress: 45/100
(UploadWorker) Progress: 46/100
(UploadWorker) Progress: 47/100
(UploadWorker) Progress: 48/100
(UploadWorker) Progress: 49/100
(UploadWorker) Progress: 50/100
(UploadWorker) Progress: 51/100
(UploadWorker) Progress: 52/100
(UploadWorker) Progress: 53/100
(UploadWorker) Progress: 54/100
(UploadWorker) Progress: 55/100
(UploadWorker) Progress: 56/100
(UploadWorker) Progress: 57/100
(UploadWorker) Progress: 58/100
(UploadWorker) Progress: 59/100
(UploadWorker) Progress: 60/100
(UploadWorker) Progress: 61/100
(UploadWorker) Progress: 62/100
(UploadWorker) Progress: 63/100
(UploadWorker) Progress: 64/100
(UploadWorker) Progress: 65/100
(UploadWorker) Progress: 66/100
(UploadWorker) Progress: 67/100
(UploadWorker) Progress: 68/100
(UploadWorker) Progress: 69/100
(UploadWorker) Progress: 70/100
(UploadWorker) Progress: 71/100
(UploadWorker) Progress: 72/100
(UploadWorker) Progress: 73/100
(UploadWorker) Progress: 74/100
(UploadWorker) Progress: 75/100
(UploadWorker) Progress: 76/100
(UploadWorker) Progress: 77/100
(UploadWorker) Progress: 78/100
(UploadWorker) Progress: 79/100
(UploadWorker) Progress: 80/100
(UploadWorker) Progress: 81/100
(UploadWorker) Progress: 82/100
(UploadWorker) Progress: 83/100
(UploadWorker) Progress: 84/100
(UploadWorker) Progress: 85/100
(UploadWorker) Progress: 86/100
(UploadWorker) Progress: 87/100
(UploadWorker) Progress: 88/100
(UploadWorker) Progress: 89/100
(UploadWorker) Progress: 90/100
(UploadWorker) Progress: 91/100
(UploadWorker) Progress: 92/100
(UploadWorker) Progress: 93/100
(UploadWorker) Progress: 94/100
(UploadWorker) Progress: 95/100
(UploadWorker) Progress: 96/100
(UploadWorker) Progress: 97/100
(UploadWorker) Progress: 98/100
(UploadWorker) Progress: 99/100
(UploadWorker) Progress: 100/100
(UploadWorker) Finished at 2024/06/17 12:42:04
(MainActivity) UploadWorker's state: SUCCEEDED

 

#4-3 'Periodic Request' ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ์˜ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€

๋”๋ณด๊ธฐ
(MainActivity) DownloadWorker's state: ENQUEUED
(MainActivity) DownloadWorker's state: RUNNING
(DownloadWorker) Started at 2024/06/17 12:52:41
(DownloadWorker) Progress: 0/100
(DownloadWorker) Progress: 1/100
(DownloadWorker) Progress: 2/100
(DownloadWorker) Progress: 3/100
(DownloadWorker) Progress: 4/100
(DownloadWorker) Progress: 5/100
(DownloadWorker) Progress: 6/100
(DownloadWorker) Progress: 7/100
(DownloadWorker) Progress: 8/100
(DownloadWorker) Progress: 9/100
(DownloadWorker) Progress: 10/100
(DownloadWorker) Progress: 11/100
(DownloadWorker) Progress: 12/100
(DownloadWorker) Progress: 13/100
(DownloadWorker) Progress: 14/100
(DownloadWorker) Progress: 15/100
(DownloadWorker) Progress: 16/100
(DownloadWorker) Progress: 17/100
(DownloadWorker) Progress: 18/100
(DownloadWorker) Progress: 19/100
(DownloadWorker) Progress: 20/100
(DownloadWorker) Progress: 21/100
(DownloadWorker) Progress: 22/100
(DownloadWorker) Progress: 23/100
(DownloadWorker) Progress: 24/100
(DownloadWorker) Progress: 25/100
(DownloadWorker) Progress: 26/100
(DownloadWorker) Progress: 27/100
(DownloadWorker) Progress: 28/100
(DownloadWorker) Progress: 29/100
(DownloadWorker) Progress: 30/100
(DownloadWorker) Progress: 31/100
(DownloadWorker) Progress: 32/100
(DownloadWorker) Progress: 33/100
(DownloadWorker) Progress: 34/100
(DownloadWorker) Progress: 35/100
(DownloadWorker) Progress: 36/100
(DownloadWorker) Progress: 37/100
(DownloadWorker) Progress: 38/100
(DownloadWorker) Progress: 39/100
(DownloadWorker) Progress: 40/100
(DownloadWorker) Progress: 41/100
(DownloadWorker) Progress: 42/100
(DownloadWorker) Progress: 43/100
(DownloadWorker) Progress: 44/100
(DownloadWorker) Progress: 45/100
(DownloadWorker) Progress: 46/100
(DownloadWorker) Progress: 47/100
(DownloadWorker) Progress: 48/100
(DownloadWorker) Progress: 49/100
(DownloadWorker) Progress: 50/100
(DownloadWorker) Progress: 51/100
(DownloadWorker) Progress: 52/100
(DownloadWorker) Progress: 53/100
(DownloadWorker) Progress: 54/100
(DownloadWorker) Progress: 55/100
(DownloadWorker) Progress: 56/100
(DownloadWorker) Progress: 57/100
(DownloadWorker) Progress: 58/100
(DownloadWorker) Progress: 59/100
(DownloadWorker) Progress: 60/100
(DownloadWorker) Progress: 61/100
(DownloadWorker) Progress: 62/100
(DownloadWorker) Progress: 63/100
(DownloadWorker) Progress: 64/100
(DownloadWorker) Progress: 65/100
(DownloadWorker) Progress: 66/100
(DownloadWorker) Progress: 67/100
(DownloadWorker) Progress: 68/100
(DownloadWorker) Progress: 69/100
(DownloadWorker) Progress: 70/100
(DownloadWorker) Progress: 71/100
(DownloadWorker) Progress: 72/100
(DownloadWorker) Progress: 73/100
(DownloadWorker) Progress: 74/100
(DownloadWorker) Progress: 75/100
(DownloadWorker) Progress: 76/100
(DownloadWorker) Progress: 77/100
(DownloadWorker) Progress: 78/100
(DownloadWorker) Progress: 79/100
(DownloadWorker) Progress: 80/100
(DownloadWorker) Progress: 81/100
(DownloadWorker) Progress: 82/100
(DownloadWorker) Progress: 83/100
(DownloadWorker) Progress: 84/100
(DownloadWorker) Progress: 85/100
(DownloadWorker) Progress: 86/100
(DownloadWorker) Progress: 87/100
(DownloadWorker) Progress: 88/100
(DownloadWorker) Progress: 89/100
(DownloadWorker) Progress: 90/100
(DownloadWorker) Progress: 91/100
(DownloadWorker) Progress: 92/100
(DownloadWorker) Progress: 93/100
(DownloadWorker) Progress: 94/100
(DownloadWorker) Progress: 95/100
(DownloadWorker) Progress: 96/100
(DownloadWorker) Progress: 97/100
(DownloadWorker) Progress: 98/100
(DownloadWorker) Progress: 99/100
(DownloadWorker) Progress: 100/100
(DownloadWorker) Finished at 2024/06/17 12:52:41
(MainActivity) DownloadWorker's state: ENQUEUED
(DownloadWorker) Started at 2024/06/17 01:07:41
(DownloadWorker) Progress: 0/100
(DownloadWorker) Progress: 1/100
(DownloadWorker) Progress: 2/100
(DownloadWorker) Progress: 3/100
(DownloadWorker) Progress: 4/100
(DownloadWorker) Progress: 5/100
(DownloadWorker) Progress: 6/100
(DownloadWorker) Progress: 7/100
(DownloadWorker) Progress: 8/100
(DownloadWorker) Progress: 9/100
(DownloadWorker) Progress: 10/100
(DownloadWorker) Progress: 11/100
(DownloadWorker) Progress: 12/100
(DownloadWorker) Progress: 13/100
(DownloadWorker) Progress: 14/100
(DownloadWorker) Progress: 15/100
(DownloadWorker) Progress: 16/100
(DownloadWorker) Progress: 17/100
(DownloadWorker) Progress: 18/100
(DownloadWorker) Progress: 19/100
(DownloadWorker) Progress: 20/100
(MainActivity) DownloadWorker's state: RUNNING
(DownloadWorker) Progress: 21/100
(DownloadWorker) Progress: 22/100
(DownloadWorker) Progress: 23/100
(DownloadWorker) Progress: 24/100
(DownloadWorker) Progress: 25/100
(DownloadWorker) Progress: 26/100
(DownloadWorker) Progress: 27/100
(DownloadWorker) Progress: 28/100
(DownloadWorker) Progress: 29/100
(DownloadWorker) Progress: 30/100
(DownloadWorker) Progress: 31/100
(DownloadWorker) Progress: 32/100
(DownloadWorker) Progress: 33/100
(DownloadWorker) Progress: 34/100
(DownloadWorker) Progress: 35/100
(DownloadWorker) Progress: 36/100
(DownloadWorker) Progress: 37/100
(DownloadWorker) Progress: 38/100
(DownloadWorker) Progress: 39/100
(DownloadWorker) Progress: 40/100
(DownloadWorker) Progress: 41/100
(DownloadWorker) Progress: 42/100
(DownloadWorker) Progress: 43/100
(DownloadWorker) Progress: 44/100
(DownloadWorker) Progress: 45/100
(DownloadWorker) Progress: 46/100
(DownloadWorker) Progress: 47/100
(DownloadWorker) Progress: 48/100
(DownloadWorker) Progress: 49/100
(DownloadWorker) Progress: 50/100
(DownloadWorker) Progress: 51/100
(DownloadWorker) Progress: 52/100
(DownloadWorker) Progress: 53/100
(DownloadWorker) Progress: 54/100
(DownloadWorker) Progress: 55/100
(DownloadWorker) Progress: 56/100
(DownloadWorker) Progress: 57/100
(DownloadWorker) Progress: 58/100
(DownloadWorker) Progress: 59/100
(DownloadWorker) Progress: 60/100
(DownloadWorker) Progress: 61/100
(DownloadWorker) Progress: 62/100
(DownloadWorker) Progress: 63/100
(DownloadWorker) Progress: 64/100
(DownloadWorker) Progress: 65/100
(DownloadWorker) Progress: 66/100
(DownloadWorker) Progress: 67/100
(DownloadWorker) Progress: 68/100
(DownloadWorker) Progress: 69/100
(DownloadWorker) Progress: 70/100
(DownloadWorker) Progress: 71/100
(DownloadWorker) Progress: 72/100
(DownloadWorker) Progress: 73/100
(DownloadWorker) Progress: 74/100
(DownloadWorker) Progress: 75/100
(DownloadWorker) Progress: 76/100
(DownloadWorker) Progress: 77/100
(DownloadWorker) Progress: 78/100
(DownloadWorker) Progress: 79/100
(DownloadWorker) Progress: 80/100
(DownloadWorker) Progress: 81/100
(DownloadWorker) Progress: 82/100
(DownloadWorker) Progress: 83/100
(DownloadWorker) Progress: 84/100
(DownloadWorker) Progress: 85/100
(DownloadWorker) Progress: 86/100
(DownloadWorker) Progress: 87/100
(DownloadWorker) Progress: 88/100
(DownloadWorker) Progress: 89/100
(DownloadWorker) Progress: 90/100
(DownloadWorker) Progress: 91/100
(DownloadWorker) Progress: 92/100
(DownloadWorker) Progress: 93/100
(DownloadWorker) Progress: 94/100
(DownloadWorker) Progress: 95/100
(DownloadWorker) Progress: 96/100
(DownloadWorker) Progress: 97/100
(DownloadWorker) Progress: 98/100
(DownloadWorker) Progress: 99/100
(DownloadWorker) Progress: 100/100
(DownloadWorker) Finished at 2024/06/17 01:07:41
(MainActivity) DownloadWorker's state: ENQUEUED
(DownloadWorker) Started at 2024/06/17 01:22:41
(DownloadWorker) Progress: 0/100
(DownloadWorker) Progress: 1/100
(DownloadWorker) Progress: 2/100
(DownloadWorker) Progress: 3/100
(DownloadWorker) Progress: 4/100
(DownloadWorker) Progress: 5/100
(DownloadWorker) Progress: 6/100
(DownloadWorker) Progress: 7/100
(DownloadWorker) Progress: 8/100
(DownloadWorker) Progress: 9/100
(DownloadWorker) Progress: 10/100
(DownloadWorker) Progress: 11/100
(DownloadWorker) Progress: 12/100
(DownloadWorker) Progress: 13/100
(DownloadWorker) Progress: 14/100
(DownloadWorker) Progress: 15/100
(DownloadWorker) Progress: 16/100
(DownloadWorker) Progress: 17/100
(DownloadWorker) Progress: 18/100
(DownloadWorker) Progress: 19/100
(DownloadWorker) Progress: 20/100
(DownloadWorker) Progress: 21/100
(DownloadWorker) Progress: 22/100
(DownloadWorker) Progress: 23/100
(DownloadWorker) Progress: 24/100
(DownloadWorker) Progress: 25/100
(DownloadWorker) Progress: 26/100
(DownloadWorker) Progress: 27/100
(DownloadWorker) Progress: 28/100
(DownloadWorker) Progress: 29/100
(DownloadWorker) Progress: 30/100
(DownloadWorker) Progress: 31/100
(DownloadWorker) Progress: 32/100
(DownloadWorker) Progress: 33/100
(DownloadWorker) Progress: 34/100
(DownloadWorker) Progress: 35/100
(DownloadWorker) Progress: 36/100
(DownloadWorker) Progress: 37/100
(DownloadWorker) Progress: 38/100
(DownloadWorker) Progress: 39/100
(DownloadWorker) Progress: 40/100
(MainActivity) DownloadWorker's state: RUNNING
(DownloadWorker) Progress: 41/100
(DownloadWorker) Progress: 42/100
(DownloadWorker) Progress: 43/100
(DownloadWorker) Progress: 44/100
(DownloadWorker) Progress: 45/100
(DownloadWorker) Progress: 46/100
(DownloadWorker) Progress: 47/100
(DownloadWorker) Progress: 48/100
(DownloadWorker) Progress: 49/100
(DownloadWorker) Progress: 50/100
(DownloadWorker) Progress: 51/100
(DownloadWorker) Progress: 52/100
(DownloadWorker) Progress: 53/100
(DownloadWorker) Progress: 54/100
(DownloadWorker) Progress: 55/100
(DownloadWorker) Progress: 56/100
(DownloadWorker) Progress: 57/100
(DownloadWorker) Progress: 58/100
(DownloadWorker) Progress: 59/100
(DownloadWorker) Progress: 60/100
(DownloadWorker) Progress: 61/100
(DownloadWorker) Progress: 62/100
(DownloadWorker) Progress: 63/100
(DownloadWorker) Progress: 64/100
(DownloadWorker) Progress: 65/100
(DownloadWorker) Progress: 66/100
(DownloadWorker) Progress: 67/100
(DownloadWorker) Progress: 68/100
(DownloadWorker) Progress: 69/100
(DownloadWorker) Progress: 70/100
(DownloadWorker) Progress: 71/100
(DownloadWorker) Progress: 72/100
(DownloadWorker) Progress: 73/100
(DownloadWorker) Progress: 74/100
(DownloadWorker) Progress: 75/100
(DownloadWorker) Progress: 76/100
(DownloadWorker) Progress: 77/100
(DownloadWorker) Progress: 78/100
(DownloadWorker) Progress: 79/100
(DownloadWorker) Progress: 80/100
(DownloadWorker) Progress: 81/100
(DownloadWorker) Progress: 82/100
(DownloadWorker) Progress: 83/100
(DownloadWorker) Progress: 84/100
(DownloadWorker) Progress: 85/100
(DownloadWorker) Progress: 86/100
(DownloadWorker) Progress: 87/100
(DownloadWorker) Progress: 88/100
(DownloadWorker) Progress: 89/100
(DownloadWorker) Progress: 90/100
(DownloadWorker) Progress: 91/100
(DownloadWorker) Progress: 92/100
(DownloadWorker) Progress: 93/100
(DownloadWorker) Progress: 94/100
(DownloadWorker) Progress: 95/100
(DownloadWorker) Progress: 96/100
(DownloadWorker) Progress: 97/100
(DownloadWorker) Progress: 98/100
(DownloadWorker) Progress: 99/100
(DownloadWorker) Progress: 100/100
(DownloadWorker) Finished at 2024/06/17 01:22:41
(MainActivity) DownloadWorker's state: ENQUEUED
(DownloadWorker) Started at 2024/06/17 01:37:41
(DownloadWorker) Progress: 0/100
(DownloadWorker) Progress: 1/100
(DownloadWorker) Progress: 2/100
(DownloadWorker) Progress: 3/100
(DownloadWorker) Progress: 4/100
(DownloadWorker) Progress: 5/100
(DownloadWorker) Progress: 6/100
(DownloadWorker) Progress: 7/100
(DownloadWorker) Progress: 8/100
(DownloadWorker) Progress: 9/100
(DownloadWorker) Progress: 10/100
(DownloadWorker) Progress: 11/100
(DownloadWorker) Progress: 12/100
(DownloadWorker) Progress: 13/100
(DownloadWorker) Progress: 14/100
(DownloadWorker) Progress: 15/100
(DownloadWorker) Progress: 16/100
(DownloadWorker) Progress: 17/100
(DownloadWorker) Progress: 18/100
(MainActivity) DownloadWorker's state: RUNNING
(DownloadWorker) Progress: 19/100
(DownloadWorker) Progress: 20/100
(DownloadWorker) Progress: 21/100
(DownloadWorker) Progress: 22/100
(DownloadWorker) Progress: 23/100
(DownloadWorker) Progress: 24/100
(DownloadWorker) Progress: 25/100
(DownloadWorker) Progress: 26/100
(DownloadWorker) Progress: 27/100
(DownloadWorker) Progress: 28/100
(DownloadWorker) Progress: 29/100
(DownloadWorker) Progress: 30/100
(DownloadWorker) Progress: 31/100
(DownloadWorker) Progress: 32/100
(DownloadWorker) Progress: 33/100
(DownloadWorker) Progress: 34/100
(DownloadWorker) Progress: 35/100
(DownloadWorker) Progress: 36/100
(DownloadWorker) Progress: 37/100
(DownloadWorker) Progress: 38/100
(DownloadWorker) Progress: 39/100
(DownloadWorker) Progress: 40/100
(DownloadWorker) Progress: 41/100
(DownloadWorker) Progress: 42/100
(DownloadWorker) Progress: 43/100
(DownloadWorker) Progress: 44/100
(DownloadWorker) Progress: 45/100
(DownloadWorker) Progress: 46/100
(DownloadWorker) Progress: 47/100
(DownloadWorker) Progress: 48/100
(DownloadWorker) Progress: 49/100
(DownloadWorker) Progress: 50/100
(DownloadWorker) Progress: 51/100
(DownloadWorker) Progress: 52/100
(DownloadWorker) Progress: 53/100
(DownloadWorker) Progress: 54/100
(DownloadWorker) Progress: 55/100
(DownloadWorker) Progress: 56/100
(DownloadWorker) Progress: 57/100
(DownloadWorker) Progress: 58/100
(DownloadWorker) Progress: 59/100
(DownloadWorker) Progress: 60/100
(DownloadWorker) Progress: 61/100
(DownloadWorker) Progress: 62/100
(DownloadWorker) Progress: 63/100
(DownloadWorker) Progress: 64/100
(DownloadWorker) Progress: 65/100
(DownloadWorker) Progress: 66/100
(DownloadWorker) Progress: 67/100
(DownloadWorker) Progress: 68/100
(DownloadWorker) Progress: 69/100
(DownloadWorker) Progress: 70/100
(DownloadWorker) Progress: 71/100
(DownloadWorker) Progress: 72/100
(DownloadWorker) Progress: 73/100
(DownloadWorker) Progress: 74/100
(DownloadWorker) Progress: 75/100
(DownloadWorker) Progress: 76/100
(DownloadWorker) Progress: 77/100
(DownloadWorker) Progress: 78/100
(DownloadWorker) Progress: 79/100
(DownloadWorker) Progress: 80/100
(DownloadWorker) Progress: 81/100
(DownloadWorker) Progress: 82/100
(DownloadWorker) Progress: 83/100
(DownloadWorker) Progress: 84/100
(DownloadWorker) Progress: 85/100
(DownloadWorker) Progress: 86/100
(DownloadWorker) Progress: 87/100
(DownloadWorker) Progress: 88/100
(DownloadWorker) Progress: 89/100
(DownloadWorker) Progress: 90/100
(DownloadWorker) Progress: 91/100
(DownloadWorker) Progress: 92/100
(DownloadWorker) Progress: 93/100
(DownloadWorker) Progress: 94/100
(DownloadWorker) Progress: 95/100
(DownloadWorker) Progress: 96/100
(DownloadWorker) Progress: 97/100
(DownloadWorker) Progress: 98/100
(DownloadWorker) Progress: 99/100
(DownloadWorker) Progress: 100/100
(DownloadWorker) Finished at 2024/06/17 01:37:41
(MainActivity) DownloadWorker's state: ENQUEUED
(DownloadWorker) Started at 2024/06/17 01:52:41
(DownloadWorker) Progress: 0/100
(DownloadWorker) Progress: 1/100
(DownloadWorker) Progress: 2/100
(DownloadWorker) Progress: 3/100
(DownloadWorker) Progress: 4/100
(DownloadWorker) Progress: 5/100
(DownloadWorker) Progress: 6/100
(DownloadWorker) Progress: 7/100
(DownloadWorker) Progress: 8/100
(DownloadWorker) Progress: 9/100
(DownloadWorker) Progress: 10/100
(DownloadWorker) Progress: 11/100
(DownloadWorker) Progress: 12/100
(DownloadWorker) Progress: 13/100
(DownloadWorker) Progress: 14/100
(DownloadWorker) Progress: 15/100
(DownloadWorker) Progress: 16/100
(DownloadWorker) Progress: 17/100
(DownloadWorker) Progress: 18/100
(DownloadWorker) Progress: 19/100
(DownloadWorker) Progress: 20/100
(DownloadWorker) Progress: 21/100
(DownloadWorker) Progress: 22/100
(DownloadWorker) Progress: 23/100
(DownloadWorker) Progress: 24/100
(DownloadWorker) Progress: 25/100
(DownloadWorker) Progress: 26/100
(DownloadWorker) Progress: 27/100
(DownloadWorker) Progress: 28/100
(DownloadWorker) Progress: 29/100
(DownloadWorker) Progress: 30/100
(DownloadWorker) Progress: 31/100
(DownloadWorker) Progress: 32/100
(DownloadWorker) Progress: 33/100
(DownloadWorker) Progress: 34/100
(DownloadWorker) Progress: 35/100
(MainActivity) DownloadWorker's state: RUNNING
(DownloadWorker) Progress: 36/100
(DownloadWorker) Progress: 37/100
(DownloadWorker) Progress: 38/100
(DownloadWorker) Progress: 39/100
(DownloadWorker) Progress: 40/100
(DownloadWorker) Progress: 41/100
(DownloadWorker) Progress: 42/100
(DownloadWorker) Progress: 43/100
(DownloadWorker) Progress: 44/100
(DownloadWorker) Progress: 45/100
(DownloadWorker) Progress: 46/100
(DownloadWorker) Progress: 47/100
(DownloadWorker) Progress: 48/100
(DownloadWorker) Progress: 49/100
(DownloadWorker) Progress: 50/100
(DownloadWorker) Progress: 51/100
(DownloadWorker) Progress: 52/100
(DownloadWorker) Progress: 53/100
(DownloadWorker) Progress: 54/100
(DownloadWorker) Progress: 55/100
(DownloadWorker) Progress: 56/100
(DownloadWorker) Progress: 57/100
(DownloadWorker) Progress: 58/100
(DownloadWorker) Progress: 59/100
(DownloadWorker) Progress: 60/100
(DownloadWorker) Progress: 61/100
(DownloadWorker) Progress: 62/100
(DownloadWorker) Progress: 63/100
(DownloadWorker) Progress: 64/100
(DownloadWorker) Progress: 65/100
(DownloadWorker) Progress: 66/100
(DownloadWorker) Progress: 67/100
(DownloadWorker) Progress: 68/100
(DownloadWorker) Progress: 69/100
(DownloadWorker) Progress: 70/100
(DownloadWorker) Progress: 71/100
(DownloadWorker) Progress: 72/100
(DownloadWorker) Progress: 73/100
(DownloadWorker) Progress: 74/100
(DownloadWorker) Progress: 75/100
(DownloadWorker) Progress: 76/100
(DownloadWorker) Progress: 77/100
(DownloadWorker) Progress: 78/100
(DownloadWorker) Progress: 79/100
(DownloadWorker) Progress: 80/100
(DownloadWorker) Progress: 81/100
(DownloadWorker) Progress: 82/100
(DownloadWorker) Progress: 83/100
(DownloadWorker) Progress: 84/100
(DownloadWorker) Progress: 85/100
(DownloadWorker) Progress: 86/100
(DownloadWorker) Progress: 87/100
(DownloadWorker) Progress: 88/100
(DownloadWorker) Progress: 89/100
(DownloadWorker) Progress: 90/100
(DownloadWorker) Progress: 91/100
(DownloadWorker) Progress: 92/100
(DownloadWorker) Progress: 93/100
(DownloadWorker) Progress: 94/100
(DownloadWorker) Progress: 95/100
(DownloadWorker) Progress: 96/100
(DownloadWorker) Progress: 97/100
(DownloadWorker) Progress: 98/100
(DownloadWorker) Progress: 99/100
(DownloadWorker) Progress: 100/100
(DownloadWorker) Finished at 2024/06/17 01:52:41
(MainActivity) DownloadWorker's state: ENQUEUED

์ดํ•˜ ์ƒ๋žต

1์‹œ๊ฐ„ ์ •๋„๋ฅผ ๊ธฐ๋‹ค๋ ค, ์ด 4๋ฒˆ์˜ ์ž‘์—… ์ˆ˜ํ–‰์— ๋Œ€ํ•œ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์–ป์–ด๋ƒˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์—์„œ ๋ณด๋“ฏ PeriodicWorkRequest๋Š” SUCCEEDED ์ƒํƒœ ๋ฐ FAILED ์ƒํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. PeriodicWorkRequest๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ทจ์†Œํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ฌดํ•œํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด PeriodicWorkRequest๊ฐ€ OneTimeWorkRequest์˜€๋‹ค๋ฉด SUCCEEDED ๋ฐ FAILED ์ƒํƒœ์˜€๊ฒ ์ง€๋งŒ ๊ทธ ๋Œ€์‹ , ENQUEUED ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€ ๋‹ค์‹œ RUNNING๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

 

๋˜, PeriodicWorkRequest๋Š” Chaining์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— BLOCKED ์ƒํƒœ ๋˜ํ•œ ์ง€๋‹ ์ˆ˜ ์—†๋‹ค. Chaining์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ์ด ๊ฒŒ์‹œ๊ธ€๋ฅผ ๋ด์•ผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#5 ์š”์•ฝ

WorkManager๋กœ ์—ฌ๋Ÿฌ ์ž‘์—…๋“ค์„ ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์— ๋งก๊ฒจ๋†“๋Š”๋‹ค.

 

#6 ์™„์„ฑ๋œ ์•ฑ

 

android-practice/work-manager/WorkManagerBasics at master · Kanmanemone/android-practice

Contribute to Kanmanemone/android-practice development by creating an account on GitHub.

github.com

 

#7 ์ด์–ด์ง€๋Š” ๊ธ€

#7-1 WorkRequest์— ์ด๋ฆ„ ๋ถ™์ด๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ

 

[Android] WorkManager - enqueueUniqueWork()

#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ฐœ์š”#1 WorkManager๋Š” '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'์˜ ๊ด€๋ฆฌ์ž WorkManager๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… - Kotlin | Android DevelopersAndroid์—๋Š”

kenel.tistory.com

 

#7-2 Worker์— ์ธ์ž ์ „๋‹ฌ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜๋ฐ›๊ธฐ

 

[Android] WorkManager - ์ธ์ž ์ „๋‹ฌ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜

#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ฐœ์š”#1 WorkManager๋Š” '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'์˜ ๊ด€๋ฆฌ์ž WorkManager๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… - Kotlin | Android DevelopersAndroid์—๋Š”

kenel.tistory.com

 

#7-3 WorkRequest ์‹คํ–‰์— ํ•„์š”ํ•œ ์กฐ๊ฑด ๊ฑธ๊ธฐ

 

[Android] WorkManager - ์ œ์•ฝ ์กฐ๊ฑด (Constraints)

#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ฐœ์š”#1 WorkManager๋Š” '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'์˜ ๊ด€๋ฆฌ์ž WorkManager๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… - Kotlin | Android DevelopersAndroid์—๋Š”

kenel.tistory.com

 

#7-4 ์ž‘์—… ์—ฐ์‡„ํ•˜๊ธฐ(Chaining)

 

[Android] WorkManager - ์ž‘์—… ์—ฐ์‡„ํ•˜๊ธฐ(Chaining)

#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ [Android] WorkManager - ๊ฐœ์š”#1 WorkManager๋Š” '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'์˜ ๊ด€๋ฆฌ์ž WorkManager๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… - Kotlin | Android DevelopersAndroid์—๋Š”

kenel.tistory.com