안드로이드 관련 포스팅 목록
2020/07/06 - [Android] - 안드로이드 WIFI 연결 상태 확인(Android Wifi, Connected)
2020/06/23 - [Android] - 안드로이드 버튼 클릭 이벤트 처리 예제 - 3
2020/06/23 - [Android] - 안드로이드 버튼 클릭 이벤트 처리 예제 - 2
2020/06/22 - [Android] - 안드로이드 버튼 클릭 이벤트 처리 예제 - 1
2020/06/21 - [Android] - 안드로이드 타이틀바 제거
2020/06/21 - [Android] - 안드로이드 인터넷 권한
목차
API의 필요성
안녕하세요 오늘은 안드로이드 어플리케이션이 백그라운드에서 계속 실행될 수 있도록 서비스로 실행하는 방법을 알아보겠습니다.
포그라운드란 우리가 흔히 프로그램을 실행했을 때 화면에 나타난 모습, 즉 눈에 보이는 화면이나 앞에서 실행되고 있는 상태를 말합니다. 예를들어 카카오톡 PC버전을 실행하면 친구와 채팅할 수 있는 채팅창이 화면에 나타납니다. 이렇게 앞에 나타나있는 상태를 의미합니다.
반대로 백그라운드란 뒤에서 실행되고 있는 상태, 즉 카카오톡 PC 버전을 생각해보면 채팅창을 꺼도 상대방에게 채팅이오면 알림창이 나타나는데 이러한 상태를 말합니다. 눈 앞에 보이지 않아도 계속 뒤에서 실행되고 있기 때문에 상대방에게 채팅이 도착했을 때 우리에게 알림을 줄 수 있는 것이지요. 이처럼 포그라운드와 백그라운드는 실행되는 방식이 전혀 다릅니다. 우리가 윈도우, 리눅스 환경의 컴퓨터에서 특정 프로그램을 실행하면 포그라운드, 백그라운드 방식의 프로그램을 많이 확인할 수 있습니다.
안드로이드도 마찬가지로 백그라운드에서 실행할 수 있는 서비스가 존재합니다. 이 서비스는 따로 구현을 해주어야하고 부팅후 앱을 시작하면 서비스가 등록되고 핸드폰이 종료될 때까지 서비스는 종료되지 않고 살아있습니다.
만약 부팅시 서비스를 자동 실행하고 싶다면 다음 포스팅의 내용을 확인해주세요. 자 이제 서비스 구현 방법과 실행 방법에 대하여 알아보겠습니다.
메소드 설명
public class TempService extends Service{
public TempService(){}
@Override
public IBinder onBind(Intent intent){
throw new UnsupportedOperationException("Not yet Implemented");
}
}
# 서비스 클래스 생성
extends Service
- 서비스 클래스를 새로 생성하여 실제 동작 내용을 이 클래스에 구현한다
# 서비스가 등록될 때 콜백 메소드
public IBinder onBind(Intent intent);
- 서비스가 등록될 때 자동으로 불리는 콜백 메소드
안드로이드의 서비스는 자동으로 실행될 수 없으며 반드시 한번은 서비스를 실행시키는 구문을 실행해야 합니다. 위의 메소드에서 TempService라는 클래스는 "extends Service" 구문을 사용하여 서비스를 상속받고 있습니다.
서비스가 등록될 때 onBind() 콜백 메소드가 자동으로 호출되기 때문에 초기화 등의 초기 작업이 필요하다면 이곳에 구현해주면 됩니다.
서비스 실행
public void startService() {
Intent intent = new Intent(this, TempService.class);
startService(intent);
}
위와 같이 TempService 클래스의 인텐트를 생성하고 "startService(intent)" 구문을 실행하여 서비스를 동작시킵니다. 이 때 onBind() 콜백 메소드가 호출됩니다.
전체 코드
MainActivity.java
package com.newer.runserviceexample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService();
}
public void startService() {
Intent intent = new Intent(this, TempService.class);
startService(intent);
}
}
TempService.java
package com.newer.runserviceexample;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class TempService extends Service {
public TempService(){}
@Override
public IBinder onBind(Intent intent){
throw new UnsupportedOperationException("Not yet Implemented");
}
}
총 두개의 클래스 파일이 필요합니다. TempService는 서비스 클래스이며 이 서비스를 실행시키기 위해 MainActivity 에서 intent를 실행시킵니다.
마무리
이번 포스팅에서는 안드로이드 어플리케이션에서 서비스를 구동하는 방법에 대하여 알아보았습니다. 이처럼 포그라운드와 백그라운드의 차이점을 확실히 이해하고 사용자에게 보여주지 않고 뒤에서 처리하기 위해서는 백그라운드(서비스)로 실행시켜야 한다는 것을 알았습니다.