Существует ли согласованный способ отправки данных в активность Android, открывающую активность, если она еще не открыта? - PullRequest
0 голосов
/ 11 декабря 2018

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

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

Без сомнения, я что-то упускаю.Кто-нибудь знает последовательный способ отправки данных в активность, открывая ее, если она еще не открыта?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

EventBus на помощь Event Bus flow

EventBus в 3 шага

Определить события:

public static class MessageEvent { /* Additional fields if needed */ }

Подготовка подписчиков: объявите и аннотируйте свой метод подписки, при необходимости укажите режим потока:

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

Зарегистрируйте и отмените регистрацию вашего подписчика.Например, в Android действия и фрагменты обычно должны регистрироваться в соответствии с их жизненным циклом:

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



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

Опубликовать события:

EventBus.getDefault().post(new MessageEvent());

Читать полностью руководство по началу работы.

0 голосов
/ 11 декабря 2018

Но, похоже, это не работает, если действие уже открыто, потому что вы не можете получить доступ к самому последнему намерению

Если это новый экземпляр действия, которыйуже открыт, то вы используете getIntent().

Если вместо этого вы использовали флаги или записи манифеста, чтобы организовать перенос существующего экземпляра этого действия на передний план, переопределите onNewIntent(), и вы получитепоследний Intent таким образом.

Я хочу открыть действие из службы

Запуск действия из фона - это то, что действительно может раздражатьпользователи, так как вы не знаете, что пользователь делает на переднем плане.В большинстве распространенных сценариев вам лучше использовать Notification.

...