MainActivity에서 WorkManager로 데이터를 전달하려면 .setInputData(myData)
를 사용해 보내면 됩니다. 아래 코드는 a
와 b
라는 키로 각각 10, 20이라는 값을 가진 Data를 생성하고, 이를 WorkManagerB로 전달하는 예시입니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myData : Data = workDataOf(
"a" to 10,
"b" to 20
)
val workManagerB = OneTimeWorkRequestBuilder<WorkManagerB>().setInputData(myData).build()
WorkManager.getInstance(this).enqueue(workManagerB)
}
}
WorkManager에서는 inputData.getInt("a", 1000)
를 사용해서 값을 받을 수 있습니다.
class WorkManagerB(context : Context, workerParameters: WorkerParameters) :
Worker(context, workerParameters){
override fun doWork(): Result {
val a = inputData.getInt("a", 1000)
val b = inputData.getInt("b", 2000)
val c = inputData.getInt("c", 3000)
Log.d("WorkManagerB", a.toString())
Log.d("WorkManagerB", b.toString())
Log.d("WorkManagerB", c.toString())
return Result.success()
}
}
MainActivity로 값을 보낼 때는 return Result.success(output)
를 사용해서 보내면 됩니다.
class WorkManagerB(context : Context, workerParameters: WorkerParameters) :
Worker(context, workerParameters){
override fun doWork(): Result {
val a = inputData.getInt("a", 1000)
val b = inputData.getInt("b", 2000)
val c = inputData.getInt("c", 3000)
Log.d("WorkManagerB", a.toString())
Log.d("WorkManagerB", b.toString())
Log.d("WorkManagerB", c.toString())
val output : Data = workDataOf("result" to 123)
return Result.success(output)
}
}
아래 코드는 WorkManager로부터 결과 값을 반환받는 방법을 보여줍니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myData : Data = workDataOf(
"a" to 10,
"b" to 20
)
val workManagerB = OneTimeWorkRequestBuilder<WorkManagerB>().setInputData(myData).build()
WorkManager.getInstance(this).enqueue(workManagerB)
WorkManager.getInstance(this).getWorkInfoByIdLiveData(workManagerB.id)
.observe(this, Observer { info ->
if(info != null && info.state.isFinished) {
val result = info.outputData.getInt("result", 299)
Log.d("MainActivity", result.toString())
}
})
}
}