[java] 안드로이드 서비스와 백그라운드 작업

안드로이드 앱을 개발하다보면 사용자와 상호작용하지 않고도 지속적인 작업이 필요한 경우가 있습니다. 이러한 작업을 수행하기 위해서는 안드로이드 서비스와 백그라운드 작업을 사용할 수 있습니다.

안드로이드 서비스란?

안드로이드 서비스는 백그라운드에서 동작하는 컴포넌트입니다. 사용자 인터페이스를 갖지 않고 백그라운드에서 작업을 수행할 수 있습니다. 주로 음악 재생, 파일 다운로드, 데이터 동기화 등의 작업에 사용됩니다.

안드로이드 서비스는 다음과 같이 두 가지 유형으로 구분됩니다.

백그라운드 작업과 스레드

안드로이드에서 백그라운드 작업을 수행할 때는 메인(UI) 스레드에서 작업을 하지 않아야 합니다. 메인 스레드는 사용자 인터페이스를 그리고 이벤트를 처리하는 역할을 담당하므로, 시간이 오래 걸리는 작업을 수행하면 앱의 응답성이 떨어질 수 있습니다. 이런 경우에는 별도의 스레드를 사용하여 백그라운드 작업을 수행해야 합니다.

안드로이드에서 스레드를 사용하는 방법에는 다음과 같은 방법들이 있습니다.

예제

다음은 안드로이드 서비스와 백그라운드 작업을 사용한 예제 코드입니다. 이 예제는 간단한 파일 다운로드 작업을 백그라운드에서 수행하는 방법을 보여줍니다.

public class FileDownloadService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 백그라운드 작업 수행
        new FileDownloadTask().execute();
        
        // 서비스가 강제로 종료되더라도 다시 시작하지 않음
        return START_NOT_STICKY;
    }
    
    private class FileDownloadTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            // 파일 다운로드 작업 수행
            // ...
            return null;
        }
        
        @Override
        protected void onPostExecute(Void result) {
            // 다운로드 완료 후 처리할 작업 수행
            // ...
            stopSelf(); // 서비스 종료
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        // 바인딩되지 않는 서비스이므로 null 반환
        return null;
    }
    
}

위의 예제 코드는 파일 다운로드 작업을 수행하는 FileDownloadService라는 서비스를 정의하고, AsyncTask를 사용하여 백그라운드에서 작업을 수행합니다. onStartCommand 메소드에서 작업을 시작하고, 작업이 완료되면 onPostExecute 메소드에서 작업 결과를 처리하고 서비스를 종료합니다.

참고 자료