2010-03-30 2 views
0

두 개의 서비스 인 텐트가 같은 서비스에 동시에 전송되는 경우 충돌이 있는지 궁금합니다. 내 코드는 다음과 같습니다.동일한 서비스에 대한 두 개의 서비스 의도로 인해 충돌이 발생할 수 있습니까?

public static class UpdateService extends Service { 

    @Override 
    public void onStart(Intent intent, int startId) { 
     int widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
       AppWidgetManager.INVALID_APPWIDGET_ID); 

     UpdateThread updateThread = new UpdateThread(); 
     updateThread.mWidgetId = widgetId; 
     updateThread.mContext = this; 

     updateThread.start(); 

     stopSelf(); 
    } 
} 

동시에 UpdateService에 2 개의 의도, 의도 1 ​​및 의도 2가 있다고 가정합니다. 이해할 수 있듯이 하나의 UpdateService 인스턴스 만있을 것입니다. 그런 다음 두 가지 의도로 인해 서비스 코드가 아래 워크 플로와 같이 순차적으로 실행됩니까? stopSelf()가 호출 ONSTART 때문에 UpdateService 시작

  1. , 즉 ONSTART()가 UpdateService 중지 의도 1.
  2. 위해 호출된다().
  3. int2에 대해 updateService가 호출됩니다. 즉, onStart()가 호출됩니다.
  4. onStart()에서 stopSelf()가 호출되기 때문에 UpdateService가 중지됩니다.

두 가지 의도로 인해 서비스 코드, 즉 onStart()가 동시에 실행될 수 있습니까? onStart() 메소드 정의에 synchronized를 넣어야합니까?

감사합니다.

답변

1

두 의도는 서비스 코드, 즉 ONSTART(), 동시에 을 실행하는 원인이 있을까요?

No. Service에는 주 응용 프로그램 스레드에서 호출되는 onStart()이 있으며 그 중 하나만 있습니다. 따라서 두 Intents은 순차적으로 배달됩니다. 하나는 물론 불확실합니다.

IntentService을 확장하면이 스레드가 이미 백그라운드 스레드를 처리하므로 더 간단합니다. onHandleIntent()에 구현 한 내용은 기본 응용 프로그램 스레드에서 실행되지 않습니다.

+0

답변 해 주셔서 감사합니다. 그것은 매우 도움이됩니다. – user256239

관련 문제