Обработка услуг и отправка данных между действиями - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь запустить службу из одного действия, чтобы выполнить вызов API и получить результат в другом действии. Я использую BroadcastReceiver для получения данных, но как мне убедиться, что действие создано и получатель подключен до отправки широковещательной рассылки от службы. Что-то не так с тем, как я это проектирую?

Заранее спасибо.

Редактировать: Для этого я запускаю 3-секундную анимацию при вызове приложения. Я не хочу тратить это время впустую, поэтому я пытаюсь получить данные из сети и затем отобразить их в активности, вызванной после окончания анимации. Я предполагал, что IntentService будет подходить, но если это не так, предложите мне, как это сделать.

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете использовать Sticky Events из EventBus библиотеки. В основном это будет кешировать ваши данные в памяти перед трансляцией событий. Данные могут быть доставлены подписчикам. Таким образом, вам не нужна особая логика для рассмотрения уже имеющихся данных.

Сначала вам нужно объявить класс для хранения данных, которые вы получаете из сети.

public class MyDataEvent {
    String token;
    // Write more properties here
}

В сервисе после получения данных из сети публикуйте событие, содержащее данные для подписчиков.

MyDataEvent data = new MyDataEvent();
data.token = "123456789abcxyz";
EventBus.getDefault().postSticky(data);

В деятельности, которую вы хотите получить данные

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

// UI updates must run on MainThread
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMyDataEvent(MyDataEvent data) {   
    // Process the data here
    Log.i("TAG", data.token);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);    
    super.onStop();
}
...