2016-01-28 2 views
0

Я использую в своем приложении Android функцию FirstStart. После того, как пользователь нажмет кнопку «Регистрация», я запустил службу регистрации, чтобы зарегистрировать пользователя на моем сервере и в GCM. В моей onClik(View v) я начинаю Намерение:IntentService finish parent Активность

Intent intent = new Intent(this, RegistrationIntentService.class); 
     intent.putExtra("user", givenUsername); 
     startService(intent); 

После этого public void onHandleIntent(Intent intent) начинается и получить маркер из GCM и поставить это на мой сервер.

Этот процесс требует нескольких секунд. Я не хочу, чтобы пользователь ждал на обычном экране, поэтому я поместил индикатор выполнения в Activity FirstStart. Он вызывается и запускается до запуска RegistrationIntentService.

По завершении службы регистрации, я хочу остановить индикатор выполнения в FirstStart и завершить службу регистрации, а также деятельность FirstStart.

Итак, как я могу закончить деятельность FirstStart в конце моей службы RegistrationIntentService? Или есть способ вернуться к деятельности FirstStart, когда будет завершена регистрация RegistrationIntentService?

+0

пожалуйста, Google ResultReceiver класса –

+4

Это звучит как самый лучший вариант для вас, чтобы связать службу к вашей деятельности. Взгляните на этот пример, посмотрите, что он вызывает 'bindService()', и посмотрите на интерфейс 'Callbacks' в службе и реализацию' updateClient() 'в Activity: http: // stackoverflow.com/questions/20594936/communication-between-activity-and-service –

ответ

2

Так как я могу закончить деятельность FirstStart в конце своего RegistrationIntentService?

Очевидно, что связь между FirstStart и RegistrationIntentService должна быть установлена. Самый быстрый способ достичь было бы:

  • регистр BroadcastReceiver в FirstStart с помощью registerReceiver() метода. Во-вторых, после того, как вся работа в пределах RegistrationIntentService будет выполнена, вам нужно только sendBroadcast() из Сервиса. Помните о IntentFilter с соответствующим набором действий, так что трансляция отправлено из RegistrationIntentService будет матч зарегистрировано BroadcastReceiver в FirstStart
  • ли в принципе то же самое, как и в первом предложении, но с использованием LocalBroadcastManager Различие между регулярным вещания и вещания с LocalBroadcastManager является что в последнем случае широковещательные сообщения видны только для процесса вашего приложения. В первом случае широковещательная передача может быть перехвачена различными приложениями (если разрешение не ограничено)
  • Используйте некоторые товары с открытым исходным кодом, такие как зеленый робот EventBus, который в основном технически относится к вещанию, но с пользовательскими объектами, которые вы Создайте.

Или есть способ вернуться в FirstStart активность, когда RegistrationIntentService закончен?

Тем не менее, широковещательная связь - это то, как вы делаете Деяние говорить с Сервисом.

Надежда, что помогает как-то :)

+1

Большое спасибо. LocalBroadcastManager решает мою проблему связи. Я также нашел этот хороший пример кода для LocalBroadcastManager: https://gist.github.com/Antarix/8131277 – Pengxer

Смежные вопросы