안드로이드

안드로이드 JobScheduler 를 대체할 Firebase JobDispatcher

알통몬_ 2017. 7. 6. 14:46
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


이번 포스팅에서는 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 사용을 추천드리면서 글을 마칩니다 ㅎㅎ


이상입니다!!



반응형