2013-05-10 2 views
0

В нашем приложении мы полагаемся исключительно на данные нашего веб-сервиса. При первом запуске мы запускаем LoginActivity, где мы обрабатываем вход в систему и извлекаем эти данные, прежде чем продолжить на MainActivity, где начинается весь пользовательский интерфейс, который использует данные.Ведение большого набора данных веб-службы при уничтожении приложения

Мы сохраняем все эти данные в модели данных static, и она отлично работает для того, что нам нужно, однако есть случаи, когда приложение уничтожается (из-за ограничений памяти), а Activity сохраняет свое состояние. Поэтому, если я запустил и запустил несколько других приложений (чтобы это произошло), перезапустите приложение, он попытается возобновить MainActivity (который опирается на данные из службы) и сработает из-за того, что приложение больше неактивно и модель данных больше не содержит данных.

Я обнаружил, что в этом случае будет вызван метод Application.onCreate(), поэтому мне кажется, что я хотел бы вернуться к экрану входа в систему в то время, но, похоже, не рекомендуется использовать его для запуска деятельность из контекста приложения, не говоря уже о том, что мы уже находимся в процессе возобновления деятельности.

То, что я действительно хотел бы для применения в не сохраняют состояние активности после Application больше не является активным (и все статические данные были потеряны), и просто начать с LoginActivity, как и ожидалось.

Это похоже на очень распространенный сценарий; любые предложения о чем-то простом, которые я могу игнорировать, или любую дополнительную информацию, которую я могу дать?

ответ

1

У меня такая же проблема.

Теперь я первый проверить статические данные onResume() из MainActivity, в то время как статические данные нулевой я использую startActivityForResult открыть LoginActivity для подготовки статических данных, а затем продолжить, когда он возвращается в Activity.OKonActivityResult.

+0

Это похоже на хороший подход, позвольте мне попробовать. :) – kcoppock

+0

Я собираюсь пройти этот маршрут; Я просто не позволю использовать любые непроверенные вызовы модели данных в моих жизненных циклах. – kcoppock

0

Если вы действительно хотите иметь приложение перезапускается к LoginActivity, первое, что приходит на ум, это проверка во всех других Activity.onCreate:

if (yourStaticData == null) { 
    finish(); 
    return; 
} 

я предлагаю не делать, что и делает приложение правильно вести себя, когда процесс убит.

+0

Удивительно, но это не работает. У нас есть несколько фрагментов в действии, и когда вы вызываете финиш, даже из onCreate(), он проходит и вызывает 'onCreateView()' и другие методы жизненного цикла для фрагментов (которые полагаются на данные), прежде чем он на самом деле заканчивается. – kcoppock

+0

@kcoppock Я рад, что это не так (легко). Это взлом архитектуры приложения. Вам также придется обернуть код «Фрагменты» в этой проверке и ничего не делать, если оно равно null. Уродливый ... И это должно быть. Возобновление после того, как процесс убит, не должно отличаться от обычного, за исключением того, что вы должны загружать данные в память. –

+0

Я согласен в какой-то степени, но я бы согласился больше, если бы был какой-то обратный вызов, чтобы сообщить нам, что приложение было уничтожено. (например, эквивалент 'Application.onCreate()') – kcoppock

0

clearTaskOnLaunch может быть тем, что вы ищете.

+0

Это хорошее предложение, и это почти правильно, но я на самом деле * хочу * сохранить состояние активности пользователя до тех пор, пока данные не исчезнут. – kcoppock

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