Devik0213 / memo

메모
1 stars 0 forks source link

WorkManager 써보자.. #31

Open Devik0213 opened 4 years ago

Devik0213 commented 4 years ago

AlarmManager > Br.. IntenteService JobScheduler

사용에 제한이있다. 어디선가 명시적인 리스닝과 OS버전에 따른 문제가있다. 명시적인 리스닝을 위해 Background 에서 실행할 Android Component는 필수적이다 (Br, Serivce, ??..) 다싫다..난 백그라운드만 돌면되는데.

WorkManager이다. 크게 OneTimeWorker/PeriodicWorker 가 있다 OneTimeWorker - 1회 실행후 반복이없다. PeriodicWorkRequest - 반복성을 갖고 '몇번, 몇초간격' 마다 실행되도록이다.

요구사항은 메인화면을 접근을 확인후, 15일동안 앱을 킨적이 없다면, 오랜만에 앱좀 켜야지?하고 알려주는 LocalPush 를 만들고싶다. (요약 : 메인화면을 키면, 로컬푸시 노출시간을 다시 15일 이후로 변경한다) 기존 제약사항이라면, 재부팅하고나서 AlarmManager는 날아간 alarm을 복구해주고, 이전기록을 보고, API 부터 다시호출하고, 이전기독을 확인하는 작업을 해야한다.

WorkManager 를 통한다면 위와 같은 제약사항을 쉽게 처리할수있다. enqueue 를하면, 누적되어서 계속 쌓인다. 나중에 WorkManager에 등록된 Worker를 보기위해선, ID, Tag로 찾아야하는데 기본값이 있기때문에 별도 설정을 해주지않으면 아래와 같이 여러개를 찾게된다.


ID : 0ef77074-a975-4167-b489-6be51a67877a + TAG : [com.local.LongtimePushWorker, enQ], ENQUEUED

ID : 2127be8f-246d-4513-8abc-f838ad9e2d71 + TAG : [com.local.LongtimePushWorker, enQ], SUCCEEDED

ID : 323ced5c-2d9a-44b7-a79a-6c015ae10d07 + TAG : [com.local.LongtimePushWorker, enQ], ENQUEUED

ID : 482c675e-1361-4e8f-8dff-649154019844 + TAG : [com.local.LongtimePushWorker, enQ], ENQUEUED

ID : 7f6e2c33-0e8d-464c-a192-f20ee8399dac + TAG : [com.local.LongtimePushWorker, enQ], ENQUEUED

ID : d03934cf-b0d3-4871-a73e-42ab9254335b + TAG : [com.local.LongtimePushWorker, enQ], SUCCEEDED

enqueue를 사용하면 기존에있는 워커를 지우고, 다시 등록해야함. enqueueUniqueWork 를해주면, 유일하게 하나로유지

d03934cf-b0d3-4871-a73e-42ab9254335b + TAG : [com.local.LongtimePushWorker, enQ], SUCCEEDED

API낭비를 막기위해 하루 한번 실행하는데, API실패에 대한 처리를 별도로 하는게 좋을지?

재부팅 가능 유휴한상태 가능 프로세스없이도 가능