안드로이드 서비스 공부중인데 질문있습니다.
조회수 2086회
public class MainActivity extends AppCompatActivity {
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButton1Clicked(View v) {
intent = new Intent(this, BaseService.class);
startService(intent);
}
public void onButton2Clicked(View v) {
intent = new Intent(this, BaseService.class);
stopService(intent);
}
}
///////////////////////////////////////////////////////////////////////////////////////
public class BaseService extends Service {
Boolean running = true;
int count = 1;
public BaseService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (running) {
try {
Log.d("BaseService", count + "번 서비스가 작동");
count++;
Thread.sleep(1000);
} catch (Exception e) {
Log.e("BaseService", e.toString());
}
}
}
});
thread.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
running = false;
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
위의 예제는 버튼을 누르면 버튼1을 누르면 서비스가 시작되며 카운트가 증가하고 버튼 2를 누르면 서비스가 종료되는 방식입니다. 실행하는데 있어 예제 자체는 아무문제가 없지만 궁금한게 있어 질문드립니다.
제가 버튼 1을 눌러 서비스를 실행시키고 어플을 종료하면 몇 초뒤 카운트가 초기화되어 0부터 다시 서비스가 시작됩니다. 혹시 카운트가 다시 시작되는 이유를 알수 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
서비스가 시스템에 의해 종료되었다가 다시 실행된 케이스로 보입니다. 서비스는 시스템에 의해 종료될 수 있고,
onStartCommand()
함수 반환값에 의해 서비스를 재시작할지를 판단합니다.올려주신 코드에서
super.onStartCommand()
값을 반환했기 때문에 디폴트 값인START_STICKY(or START_STICKY_COMPATIBILITY)
로 동작하는데요.START_STICKY
는 서비스가 강제종료 됐을 때, 다시 실행시켜 달라는 설정입니다. 따라서 서비스가 다시 시작되면서 카운트가 0부터 실행됐다가 볼 수 있습니다.관련 설명은 아래 링크를 참고하시기 바랍니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 서비스가 시스템에 종료되지 않게 하려면 어떻게 해야 하나요? 알 수 없는 사용자 2017.4.15 18:39
- 포그라운드에서 서비스를 실행해서 서비스의 우선순위를 높일 수(종료될 가능성이 낮아짐) 있습니다. 예를 들면 안드로이드의 음악 앱 또는 운동 앱이 사용자가 앱을 떠나더라도 상태표시줄에 앱의 상태를 보여주면서 백그라운드에서 실행되는 방식을 떠올리면 됩니다. 자세한 코드 및 설명은 다음 링크를 확인하세요. https://developer.android.com/guide/components/services.html?hl=ko#Foreground 알 수 없는 사용자 2017.4.15 19:57
-
댓글 입력