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); } |
'안드로이드' 카테고리의 다른 글
android webview popup (0) | 2024.01.30 |
---|---|
안드로이드 다른앱 위에 그리기(노티알림) (0) | 2024.01.23 |
안드로이드 문자 , 카카오톡 알림 캐치 (0) | 2024.01.16 |
Android Java 갤러리 다중이미지 가져와서 연속크랍(Crop) (0) | 2024.01.12 |
PDF 파일 불러와서 Sign하기(JAVA) (0) | 2024.01.08 |