Android намерения и обратные вызовы - PullRequest
2 голосов
/ 02 февраля 2011

Я прохожу учебные пособия для Android, и кое-что о взаимодействии намерения / деятельности сбивает меня с толку. В Javascript при каждом вызове ajax мы определяем, как следует обрабатывать результаты вместе с вызовом ajax, и мы можем использовать разные обратные вызовы для разных вызовов ajax на протяжении всего жизненного цикла приложения. В android запуск действия с намерением и обработка переданных результатов отделяются, по крайней мере, так это делается в учебнике, и есть только одна точка входа для того, как обрабатываются результаты, поэтому трудно выполнить на лету обработку результатов без возни с главной точкой входа. Я легко могу представить некоторую сложную логику, которая могла бы превратить переключение внутри главной точки входа в ужасный беспорядок. Это фундаментальная архитектура для Android или есть другой способ сделать что-то с реальными обратными вызовами вместо операторов switch в одной точке входа?

Ответы [ 3 ]

3 голосов
/ 02 февраля 2011

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

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

Вы можете сделать что-то вроде следующего, чтобы четко отделить свою логику для каждого случая:

void onActivityResult(int requestCode, ....) {
  switch(requestCode) {
     case Activity1:
        onActivity1Result(...);
        break;
     case Activity2:
        onActivity2Result(...);
        break;
  }
}
1 голос
/ 27 мая 2013

Также обратите внимание, что вам не нужно начинать новое действие для фонового процесса без его собственного экрана, такого как вызов Ajax - вместо этого вы можете использовать AsyncTask, который допускает обратный вызов в стиле JavaScript.

1 голос
/ 02 февраля 2011

Intents и Activity предназначены для того, чтобы позволить разработчикам создавать повторно используемые слабосвязанные компоненты.

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

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

  • Intent.putExtra
  • startActivityForResult (я полагаю, вы знаете это)
  • SharedPreferences
  • Служба
  • ContentProvider
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...