본문 바로가기

안드로이드

WorkerManager android java

반응형

 

1. build.gradle

 

  def work_version = "2.7.1"
  implementation "androidx.work:work-runtime:$work_version"

 

2  WorkerManager 

public class WorkerManager extends Worker {
    public WorkerManager(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }


    @NonNull
    @Override
    public Result doWork() {
        android.util.Log.d("myLog", "Doing some background work!");
        doWork();        
        return Result.success();
    }


    private void doWork() {
    //작업할 내용 코딩 
     }
}

 

 

3.WorkerManager 호출

  • NetworkType
    작업 실행 시 필요한 네트워크 유형을 제한한다.
  • BatteryNotLow
    true로 설정하면 배터리 부족 상태에서 작업이 실행되지 않는다.
  • RequiresCharging
    true로 설정하면 충전 중이어야 작업이 실행된다.
  • DeviceIdle
    true로 설정하면 디바이스가 유휴 상태이어야 작업이 실행된다.
  • StorageNotLow
    true로 설정하면 저장공간이 부족하지 않아야 작업이 실행된다.
//매일 23시에 작업 반복 
  private void startWorkRepeat(){
        Constraints constraints = new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED
                .build();  //네트워크가 연결되야 작업 실행


        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);

         if (calendar.getTimeInMillis() <= System.currentTimeMillis()) {
               calendar.add(Calendar.DAY_OF_MONTH, 1);
         }



        PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(WorkerManager.class,
                1, // Repeat interval in days
                TimeUnit.DAYS
        )
                .setConstraints(constraints)
                .setInitialDelay(calendar.getTimeInMillis() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)
                .build();




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


//10초 뒤에 한번만 작업
private void startWorkAfterTenminites(){


 Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.SECOND, 10);


        // Create a Data object if you need to pass data to the worker
        Data inputData = new Data.Builder()
                .putString("key", "value")
                .build();


        // Create a OneTimeWorkRequest with the desired execution time
        OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
                .setInitialDelay(calendar.getTimeInMillis() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)
                .setInputData(inputData)
                .build();


        // Enqueue the work request with WorkManager
        WorkManager.getInstance(this).enqueue(workRequest);


}
 

 

반응형