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

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

interfacer_han 2024. 6. 17. 20:14

#1 ์ด์ „ ๊ธ€

 

[Android] WorkManager - ๊ธฐ์ดˆ

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

kenel.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, ๋ณต์ˆ˜์˜ Worker๊ฐ€ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฉฐ ์‹คํ–‰๋˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณธ๋‹ค.

 

#2 Work Chaining

์„œ๋ฒ„์— ์ด๋ฏธ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด, ๋จผ์ € ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ filteringํ•˜๊ณ , compressํ•˜๊ณ , uploadํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ผ๋ จ์˜ ์ž‘์—…๋“ค์€ List ์ž๋ฃŒ๊ตฌ์กฐ์ฒ˜๋Ÿผ ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ์ˆœ์„œ๊ฐ€ ๋ถ€์—ฌ๋œ ์ž‘์—…์˜ ์ง‘ํ•ฉ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ Work Chaining(์—ฐ์‡„)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

#3 ์ฝ”๋“œ ์ˆ˜์ •

#3-1 OtherWorker.kt ์ƒ์„ฑ

...

class OtherWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    ...
}

UploadWorker.kt์™€ ํŒŒ์ผ ์ด๋ฆ„ ๋ฐ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋‘ ๋™์ผํ•œ Worker ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

#3-2 AnotherWorker.kt ์ƒ์„ฑ

...

class AnotherWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    ...
}

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, UploadWorker.kt์™€ ํŒŒ์ผ ์ด๋ฆ„ ๋ฐ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋‘ ๋™์ผํ•œ Worker ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

#3-3 MainActivity - setOneTimeWorkRequest()

...

class MainActivity : AppCompatActivity() {

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

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

        val otherWorker = OneTimeWorkRequest
            .Builder(OtherWorker::class.java)
            .build()

        val anotherWorker = OneTimeWorkRequest
            .Builder(AnotherWorker::class.java)
            .build()

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

        // WorkInfo๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด.
        // WorkManager.getWorkInfoByIdLiveData()๋Š” LiveData<WorkInfo>๋ฅผ ๋ฐ˜ํ™˜.
        ...
    }

    private fun setPeriodicWorkRequest() {
        ...
    }
}

 

#3-4 MainActivity - setOneTimeWorkRequest()

...

class MainActivity : AppCompatActivity() {

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

    private fun setOneTimeWorkRequest() {
        ...
    }

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

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

        // WorkInfo๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด.
        // WorkManager.getWorkInfoByIdLiveData()๋Š” LiveData<WorkInfo>๋ฅผ ๋ฐ˜ํ™˜.
        ...
    }
}

PeriodicWorkRequest์—์„œ๋Š” Work Chaining์„ ํ•  ์ˆ˜ ์—†๋‹ค. Work Chaining ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ฃผ๊ธฐ์˜ ํƒ€์ด๋ฐ์ด ์–ด๊ธ‹๋‚˜๊ณ , ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋Š๋ผ ๊ทธ ๋‹ค์Œ ์ฃผ๊ธฐ๊ฐ€ ๋Œ์•„์™€๋ฒ„๋ฆฌ๊ณ  ๊ฒฐ๊ตญ ์ž‘์—…์˜ ์ค‘๋ณต ์‹คํ–‰์ด ์•ผ๊ธฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘์ ์ธ ๊ตฌํ˜„์ด ๋ง‰ํ˜€์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ Worker ํด๋ž˜์Šค ํ•˜๋‚˜๋ฅผ PeriodicWorkRequest์— ๋„ฃ๊ณ , ํ•ด๋‹น Worker ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ Work Chaining์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

 

#3-5 ChainInitiationWorker.kt

...

class ChainInitiationWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        try {
            val workManager = WorkManager.getInstance(applicationContext)

            // WorkRequest ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
            val downloadRequest = OneTimeWorkRequest
                .Builder(DownloadWorker::class.java)
                .build()

            val otherWorker = OneTimeWorkRequest
                .Builder(OtherWorker::class.java)
                .build()

            val anotherWorker = OneTimeWorkRequest
                .Builder(AnotherWorker::class.java)
                .build()

            Log.i(...)

            workManager
                .beginWith(otherWorker)
                .then(anotherWorker)
                .then(downloadRequest)
                .enqueue()

            Log.i(...)
            return Result.success()

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

    private fun getNowTime(): String {
        ...
    }
}

UploadWorker.kt์˜ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ , ๊ฑฐ๊ธฐ์— WorkRequest ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ WorkManager์˜ ์ž‘์—… ํ์— ๋“ฑ๋กํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

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

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

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

UploadWorker์˜ ์ƒํƒœ๊ฐ€ BLOCKED์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. BLOCKED๋Š” B ์ž‘์—…์˜ ์„ ํ–‰ ์ž‘์—… A๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•„์„œ ์ˆœ์„œ ์ƒ A์—๊ฒŒ ์ข…์†๋œ(= ๋’ค์— ์žˆ๋Š”) B์˜ ์‹คํ–‰์ด ์œ ์˜ˆ๋œ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค (์ด ๊ฒŒ์‹œ๊ธ€์˜ #3 ์ฐธ์กฐ).

 

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

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

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

ChainInitiationWorker๊ฐ€ RUNNING ์ƒํƒœ ํ›„ ๊ต‰์žฅํžˆ ๋นจ๋ฆฌ ENQUEUED๋กœ ์ „ํ™˜๋˜์—ˆ๋Š”๋ฐ, ์ด๋Š” ChainInitiationWorker์˜ ์Šค๋ ˆ๋“œ์™€ ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ChainInitiationWorker ๋‚ด๋ถ€์˜ WorkRequest๊ฐ€ ์ง„ํ–‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

#5 ์š”์•ฝ

Worker๋ฅผ Chainํ™”ํ•จ์œผ๋กœ์จ, ๋” ๊ฐ€๋…์„ฑ ์ข‹๊ณ  ์œ ์—ฐํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

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

 

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

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

github.com

 

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

 

[Android] WorkManager - ๋ณ‘๋ ฌ Chaining

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

kenel.tistory.com

๋ณธ ๊ฒŒ์‹œ๊ธ€์ด Worker๋ฅผ '์ง๋ ฌ'๋กœ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ด๋ผ๋ฉด, ์ด์–ด์ง€๋Š” ๊ธ€์—์„œ๋Š” Worker๋ฅผ '๋ณ‘๋ ฌ'๋กœ๋„ ์—ฐ๊ฒฐํ•ด๋ณธ๋‹ค.