안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 Firebase 에서 제공하는 FirebaseJobDispatcher 에 대해 공부하겠습니다.
깃허브에 오픈소스 라이브러리로 공개되어 있습니다.
https://github.com/firebase/firebase-jobdispatcher-android
먼저 안드로이드 프레임워크에서 제공하는
JobScheduler 의 경우는 API 21버전 이상에서만 사용할 수 있다는 단점이 있는데요.
Firebase 의 JobDispatcher 는 API 9버전 이상이면 다 사용할 수 있기 때문에
버전 간의 소스코드를 다르게 할 필요 없이 같은 코드로 구현하면 된다는 장점이 있습니다.
사용 방법입니다.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.firebase:firebase-jobdispatcher:0.6.0'
}
gradle 밑에 dependencies 안에 위처럼 선언해줍니다.
그리고 sync를 눌러주세요.
그리고 백그라운드에서 서비스 할 JobService를 만들어주어야 하는데요.
기본으로 제공되는 JobService를 상속받는게 아니라
firebase.jobdispatcher.JobService 를 상속 받아 줍니다.
public class SampleJobService extends JobService {
Handler mHandler = new Handler();
JobParameters mRunningParams;
final Runnable mWorker = new Runnable() {
@Override
public void run() {
doJob(mRunningParams);
}
};
/**
*
* @param params Firebase JobDispatcher 에서 넘겨받은 값이 있을 경우
* @return true : 작업을 계속 이어서 해야할 경우 / false : 작업을 끝내는 경우
*/
@Override
public boolean onStartJob(JobParameters params) {
mRunningParams = params;
mHandler.postDelayed(mWorker, 0);
return false;
}
public void doJob(JobParameters parameters) {
try {
//원하는 작업에 대한 코드 구현
jobFinished(parameters, true);
} catch (Exception e) {
}
}
/**
*
* @param params Firebase JobDispatcher 에서 넘겨받은 값이 있을 경우
* @return true : 작업을 취소시킬 경우 / false :
*/
@Override
public boolean onStopJob(JobParameters params) {
return true;
}
}
그리고 위처럼 핸들러로 작업을 처리해주면 되는데요.
그 전에! manifest.xml에도 서비스를 추가해주어야 합니다.
<service
android:name=".SampleJobService"
android:exported="false">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE" />
</intent-filter>
</service>
위처럼 해줍니다.
서비스 호출 방법 ( Jobdispatcher 사용 방법 )
각 메소드 별 설명은 주석으로 달아놨습니다. ㅎㅎ 저도 제가 이해한 만큼 주석을 달아서
정확하지 않을 수 있어요 ㅎㅎ
만약 서비스가 매 30초마다 동작하게 하고 싶다면 SampleJobService의 onStartJob() 의 리턴값을
false로 설정해주시면 됩니다.
그럼 매번 새로운 서비스가 실행되어서 재호출 시간에 계속 30초가 됩니다.
하지만 저 시간은 정확하지 않아서 딱 30초 마다 호출되는게 아니라 30초 내외로 호출됩니다.
FirebaseJobDispatcher 를 일주일정도 사용해보고 있는데요.
아직까지는 큰 무리 없이 큰 에러 없이 잘 사용하고 있습니다.
디바이스를 리부팅해도 서비스가 잘 유지되네요~
안드로이드에서 제공하는 JobService 와 JobScheduler 를 사용하려고 생각하시는 분들은
Firebase 에서 제공하는 JobService 와 Jobdispatcher 사용을 추천드리면서 글을 마칩니다 ㅎㅎ
이상입니다!!