만족

[Android Studio] 서비스(Service) 본문

[Android Studio] 서비스(Service)

FrontEnd/Android Satisfaction 2017. 6. 30. 03:47


Background에서 실행되는 Process.


Activity를 새로 만들면 Manifast에 추가하는 것과 마찬가지로, Service도 만든 후에 Manifast에 추가해주어야 한다.


<service android:name="서비스 클래스명" android:enabled="true">
</service>
 
서비스 클래스의 생성

Service클래스를 상속하며, 쓰레드 사용을 위해 Runnable 인터페이스를 implements 한다.

public class ExService extends Service implements Runnable {...}

Runnable는 인터페이스이므로, onBind()와 run()메소드가 반드시 정의되어야만 한다.


예를 들어 클래스를 정의하면


public class ExService extends Service implements Runnable {
public static final String TAG="ExService";
private int count=0;
private boolean flag=true;
Thread thread;

public void onCreate(){
super.onCreate();

thread=new Thread(this);
thread.start();
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void run() {
while(flag){
Log.i(TAG, new Integer(count).toString());
count++;

try {
thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

@Override
public void onDestroy(){
super.onDestroy();
flag=false;
}
}

과 같이 정의할 수 있다.


onCreate()는 서비스가 시작될 때, 실행되는 메소드이다.


Service클래스로부터 상속받아 오버라이드 한 것이며, 이 부분에서 쓰레드를 객체화하고 시작해 준다.


onDestroy()는 서비스가 중지될 때 실행되는 메소드이다.


이 부분을 오버라이드하지 않으면, stopService()를 이용하여 Service를 종료시켜도 쓰레드는 계속 동작하게 된다.


서비스의 사용


액티비티 클래스의 onCreate() 메소드에서


Intent 객체를 만들고, startActivity(intent); 하면 서비스의 시작이고

stopActivity(intent); 하면 서비스의 종료이다.


Intent service=new Intent(this, ExService.class);
startService(service); //서비스 시작
stopService(service); //서비스 종료




Comments