안드로이드 프로그래밍[Kotiln Code]/안드로이드 부분 함수(권한얻기,인텐트, 데이터바인딩)

[Kotiln] Work Manager

훈츠 2020. 4. 7. 02:22
반응형

안녕하세요. 훈츠 입니다. 금일은 Work Manger 대해 포스팅 합니다. Work Manager에 대한 내용은 다른 블로그나 개발자 홈페이지에 잘나와있으니, 간단하게 사용법에 대해 기록합니다. 


Work Manager 

비동기 1회성 작업 또는 주기적으로 실행되는 작업을 예약 할수 있습니다. 네트워크 가용성 또는 충전 상태 같은 작업에 대한 제약 조건을 추가 할수 있으며, 작업을 순차적으로 실행 시키는 체이닝 또한 가능합니다. WorkManager 는 앱 프로세스가 사라지더라도 안전하게 종료되어야 하는 진행 중인 백그라운드 작업 또는 즉시 실행해야 하는 작업을 대상으로 하지 않습니다. 


사용법 정리 

  • Dependency 추가 
  • Worker 만들기 
  • WorkRequest 만들기 
    • 제약 걸기 
    • 시간 예약 기타..
  • WorkManager 로 작업 요청하기 

Dependency 추가 

dependencies {
	def work_version = "2.3.4"
	implementation "androidx.work:work-runtime-ktx:$work_version"
}

SimpleWork 만들기 

class SimpleWorker(ctx: Context, params:WorkerParameters) :Worker(ctx,params) {
    override fun doWork(): Result {
        // 이곳에 처리해야할 작업 코드를 추가 합니다.
        try{
            Log.d("Sample", "SimpleWorker end...")
            return Result.success()
            
        }
        catch (e:Exception){
            e.printStackTrace()
            Log.d("Sample", "SimpleWorker is not Working...")

            return Result.failure()
        }

    }
}

WorkRequest 및 WorkManager 실행

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        button.setOnClickListener{
            doWorkOneTime()
        }
        button2.setOnClickListener{
            doWorkWithConstraint()
        }

    }
    //무조건 한번 실행 
    private fun doWorkOneTime() {
        val workRequest = OneTimeWorkRequestBuilder<SimpleWorker>()
            .build()
        WorkManager.getInstance(this).enqueue(workRequest)

    }
	
    //제약 조건 걸어서 실행 
    private fun doWorkWithConstraint(){
        val constraints = Constraints.Builder()
            .build()

        val workRequest = OneTimeWorkRequestBuilder<SimpleWorker>()
            .setInitialDelay(3, TimeUnit.SECONDS)
            .build()

        WorkManager.getInstance(this).enqueue(workRequest)
    }
}

 

반응형