안드로이드에서 서비스(Service)는 화면없이 동작하는 프로그램이라고 할 수 있다.
액비티비(Activity)는 화면이 종료되면 응용프로그램이 작동하지않지만 서비스는 백그라운에서 실행되기때문에 화면과 관계없이 동작한다.
일반적으로 서비스는 onStartService()로 요청을 받고 onCreate(), onStartCommand()가 기본적으로 실행되어 서비스가 계속적으로 백그라운드에서 돌게 된다. 서비스 중지 요청을 받게되면 onDestroy()가 호출되어 서비스가 종료되게 된다.
이 서술에 관한 내용은 다음 그림과 같다.
왼쪽은 데몬형식이고, 오른쪽은 원격호출인터페이스 서비스의 경우이다.
Mservice.java
public class Mservice extends Service{
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public void onCreate(){
android.util.Log.i("서비스 테스트", "onCreate()");
super.onCreate();
}
@Override
public void onDestroy(){
android.util.Log.i("서비스 테스트","onDestroy()");
mp.stop();
super.onDestroy();
}
@Override
public void onStartCommand(Intent intent, int flags, int startId){
android.util.Log.i("서비스 테스트","onStartCommand()");
mp = MediaPlayer.create(this. R.raw.song1);
mp.setLooping(true);
mp.start();
return super.onStartCommand(intent, flags, startId);
}
}
MainActivity.java
public class MainActivity extends Activity{
Intent intent;
Button btnStart, btnStop;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTitle("서비스 테스트 예제");
intent = new Intent(this, Mservice.class);
btnStart = (Button)findViewById(R.id.btnStart);
btnStop = (Button)findViewById(R.id.btnStop);
btnStart.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
startService(intent);
android.util.Log.i("서비스 테스트","startService()");
}
});
btnStop.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
stopService(intent);
android.util.Log.i("서비스 테스트","stopService()");
}
});
}
}
Service가 시작될경우는 startService()를 Service가 정지될경우 stopService()를 넣으면된다. LifteCycle은 startService()->onCreate()->onStartCommand()->stopService()->onDestroy() 순이 된다.