2010-07-19 5 views
1

У вас есть еще одна проблема.Деятельность, снимаемая слишком много раз

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

Наша «проверка безопасности» (просто посмотрите, есть ли у них ключ входа и токен входа в «Настройки»), помещается внутри onResume() абстрактного действия. Если какая-либо из этих проверок вернется к ошибке, мы запустим активность входа и используем диалог на этом экране. (Мы делаем это, потому что мы не хотим, чтобы пользователь мог видеть данные на вкладках, если они не вошли в систему, поэтому это действие входа - черный фон с диалогами для имени пользователя и пароля). Проблема заключается в том, что onResume() абстрактной активности вызывается много раз и многократно запускает функцию входа в систему.

Мы попытались установить флаги «singleInstance» и singleTask в xml для активности входа, но действие завершает вызов функцииActivityResult, прежде чем он будет отображаться даже на экране.

+1

Почему бы вам не поместить его на вкладку onCreate или onStart? – Shouvik

ответ

0

Обнаружено, что здесь происходит. Когда пользователь запустил приложение в вертикальном режиме, приложение перешло непосредственно на экран входа в систему, а onResume вызывается только один раз, как и ожидалось. Но если пользователь запустил телефон по горизонтали, телефон выполнил бы вертикальный вызов через onResume, и до того, как телефон фактически запустит экран входа в систему, он будет работать через onResume по горизонтали. Единственный способ, которым я мог подумать об этом, - использовать статический экземпляр экземпляра, который будет увеличиваться, когда действия onCreate и decment при вызове onDestroy. Этот счетчик экземпляров затем был добавлен в мой оператор if вместе с проверкой ключа и маркера, чтобы проверить, был ли один экземпляр уже запущен.

Это решило мою проблему. Спасибо за предложения, хотя!

0

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

+0

На самом деле это не проверка безопасности. По какой-то причине наш метод onResume в нашей абстрактной деятельности запускается три раза до того, как начнется действие входа в систему. Все в порядке, мы отказались от этой идеи и возвращаемся к регулярному диалоговому окну во время действия вкладки, чтобы справиться с этим. – DavidAndroidDev

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