2015-03-12 5 views
1

Я делаю приложение для Android. Я начал службу в моей стартовой деятельности путем вызова метода StartService в методе OnCreate в основной деятельностиСлужба Android выполняется дважды

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.getActionBar().hide(); 
    setContentView(R.layout.activity_main); 
    starService(); 
} 


private void starService() { 
     startService(new Intent(getBaseContext(), HelenaService.class)); 
} 

когда я сделать тост, чтобы увидеть, как методы вызываются в моей службе. Я вижу, что этот метод вызывается дважды ..

@Override 
public void onStart(Intent intent, int startId) { 
    Toast.makeText(this, "service started", Toast.LENGTH_SHORT).show(); 
} 

Я имею в виду, я могу увидеть первый тост сразу позвонил и через несколько секунд появляется точно такое же тост сообщения.

Как я могу убедиться, что метод onStart вызывается только один раз. Пробовал флаг, но переменные перезапускаются.

Любая помощь? или советы?

+0

Можете ли вы разместить дополнительную информацию об услуге? Кроме того, где вы вызываете startService()? –

+0

Я вызываю starService() в onCreate метод запуска. Служба имеет только тосты в методах: onStartCommand и OnStart – LearningCharlito

+0

Проверьте мой ответ и посмотрите, насколько он точен. –

ответ

0

флага переменного времени «перезагрузка», потому что вы начинаете новую услугу в СтарСЕРВИСе()

Не видя больше ваш код решения я могу видеть бы поставить флаг в СтарСЕРВИСе()

private Boolean flag = true; 

затем:

private void starService() { 
if (flag){ 
    startService(new Intent(getBaseContext(), HelenaService.class)); 
    flag = false; 
    } 
} 
+0

попытался, я все еще вижу, что служба выполняется дважды. – LearningCharlito

+0

Вам нужно выслать свой код, и вы не можете сказать из опубликованных вами фрагментов. –

0
String TAG = CLASSNAME.class.getConicalName(); 

Поместите Log.e(TAG, "---onStart()---"); и Log.e(TAG, "---onStartCommand()---"); внутри соответствующих методов.

Проверьте LogCat под «ошибкой», и если вы видите оба этих журнала, то вызываются оба метода.

Если оба метода вызывается при запуске службы, и оба они содержат тост, то это причина, по которой вы видите тост дважды.

Кроме того, вы можете принудительно отключить/очистить данные внутри параметров приложения в случае продолжения работы службы после закрытия приложения. Вы захотите реализовать логику, чтобы остановить службу, такую ​​как stopSelf();