728x90
WorkManger에서 병렬로 work를 실행할려면 리스트로 work 넣어주면 된고
순차적으로 실행시킬려면 .then()으로 실행
package com.anushka.workmanagerdemo1
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.lifecycle.Observer
import androidx.work.*
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
companion object{
const val KEY_COUNT_VALUE = "key_count"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
setOneTimeWorkRequest()
}
}
private fun setOneTimeWorkRequest() {
val workManager = WorkManager.getInstance(applicationContext)
val data: Data = Data.Builder()
.putInt(KEY_COUNT_VALUE,125)
.build()
val constraints = Constraints.Builder()
.setRequiresCharging(true)
.build()
val uploadRequest = OneTimeWorkRequest.Builder(UploadWorker::class.java)
.setConstraints(constraints)
.setInputData(data)
.build()
val filteringRequest = OneTimeWorkRequest.Builder(FilteringWorker::class.java)
.build()
val compressingRequest= OneTimeWorkRequest.Builder(CompressingWorker::class.java)
.build()
val downloadingWorker= OneTimeWorkRequest.Builder(DownloadingWorker::class.java)
.build()
val paralleWorks = mutableListOf<OneTimeWorkRequest>()
paralleWorks.add(downloadingWorker)
paralleWorks.add(filteringRequest)
workManager
.beginWith(paralleWorks)
.then(compressingRequest)
.then(uploadRequest)
.enqueue()
workManager.getWorkInfoByIdLiveData(uploadRequest.id)
.observe(this, Observer {
textView.text = it.state.name
if(it.state.isFinished){
val data = it.outputData
val message = data.getString(UploadWorker.KEY_WORKER)
Toast.makeText(applicationContext,message,Toast.LENGTH_LONG).show()
}
})
}
}
worker
package com.anushka.workmanagerdemo1
import android.content.Context
import android.util.Log
import androidx.work.Data
import androidx.work.Worker
import androidx.work.WorkerParameters
import java.lang.Exception
import java.text.SimpleDateFormat
import java.util.*
class UploadWorker(context: Context,params:WorkerParameters) : Worker(context,params) {
companion object{
const val KEY_WORKER = "key_worker"
}
override fun doWork(): Result {
try {
val count = inputData.getInt(MainActivity.KEY_COUNT_VALUE,0)
for (i in 0 until count) {
Log.i("MYTAG", "Uploading $i")
}
val time = SimpleDateFormat("dd/M/yyyy hh:mm:ss")
val currentDate = time.format(Date())
val outPutData = Data.Builder()
.putString(KEY_WORKER,currentDate)
.build()
return Result.success(outPutData)
} catch (e:Exception){
return Result.failure()
}
}
}
728x90
'안드로이드 > Wrok Manager' 카테고리의 다른 글
WorkManger Worker 주기적 반복 실행 (0) | 2022.12.06 |
---|---|
WorkManager Worker의 Input, Output data 설정 (0) | 2022.12.05 |
안드로이드 WokrManger 실행 조건 설정(Constraints) (0) | 2022.12.01 |
안드로이드 WorkManager Worker 상태 업데이트 (0) | 2022.12.01 |