#android #android-activity #android-service
#Android #android-активность #android-сервис
Вопрос:
У меня есть служба, которая ограничена действием A, из этой службы мне нужно вызвать действие B и дождаться результата.
Мне удается вызвать действие B таким образом:
val intent = Intent(contextOfActivityA, ActivityB::class.java)
(contextOfActivityA as ComponentActivity).startActivityForResult(intent, 123)
Проблема в том, что я не знаю, как получить результат ActivityB.
Если я использую onActivityResult, он никогда не вызывается:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK) {
//result
}
Как я могу это сделать? Имейте в виду, что я могу управлять только сервисом, поэтому я не могу изменять или обрабатывать вызов результата в действии A.
Спасибо
Комментарии:
1. «из этой службы мне нужно вызвать действие B и дождаться результата» — это действительно пугающе с точки зрения архитектуры приложений Android.
2. Спасибо за ответ, можете ли вы объяснить, почему?
3. Пожалуйста, объясните, почему вы считаете, что вам нужно это сделать и что именно вы пытаетесь сделать.
4. В конце я изменил инфраструктуру приложения.
Ответ №1:
Это невозможно. Service
s запускаются как автономные объекты, не имеют пользовательского интерфейса и выполняют фоновые действия. Когда a Service
запускает an Activity
, Activity
выполняется задача, связанная с пользовательским интерфейсом. An Activity
может запустить другой Activity
и получить результат обратно (используя startActivityForResult()
), но a Service
— это совсем другое дело.
Комментарии:
1. Теперь я понимаю, что сервис может быть неправильным архитектурным выбором, поскольку мне тоже приходится работать с пользовательским интерфейсом, вы имеете в виду, какой из них самый правильный?
2. Вы можете обеспечить постоянство, записав данные в базу данных SQLite или в файлы или сохранить дату
SharedPreferences
. Не совсем уверен, что вы пытаетесь здесь построить.3. В конце я изменил инфраструктуру приложения.