Нажатие кнопки дома и доступ к приложению снова из приложения значок вызова onCreate?

У меня есть автономное онлайн-приложение, я нашел странную проблему, возможно, это не так, но я не понял об этом.
Требование к приложению заключается в том, что если доступ к Интернету возможен даже после запуска приложения или возобновления, я вызываю web-сервисы и сохраняю данные в sqlite, в противном случае приложение остается в автономном режиме,
У меня есть 2 действия, второе действие содержит идентификатор, который я пропускаю через намерение (этот момент важен),
Моя проблема:
Если я нахожусь во второй активности, и работает интернет, и я нажимаю кнопку «домой», то этот второй действие приостанавливается, а затем останавливается, что является поведением по умолчанию в Android, i goto настройками, отключает Wi-Fi, а затем снова нажмите значок приложения, чтобы вернуться В моем приложении, здесь я запутался, я ожидаю, что мое приложение теперь будет в onResume , но когда я вижу в logcat его сбой onCreated и приложение, возникает событие nullPointerException, потому что у этого второго действия нет этого id, я прошел через намерение ..

Заметка:
Если я использую недавнюю кнопку приложения, чтобы перейти к «настройкам», вернитесь снова после отключения wifi и повторите все это, после чего работайте нормально, его onResumes называется not oncreate ..

Мой вопрос
Почему это происходит в onCreate, в то время как я ожидаю, что буду onResume, пока я вернулся с иконки приложения?

После того, как вы называет onStop вашей деятельности, это восприимчиво к тому, чтобы быть убитым системой Android для сбора ресурсов для других приложений, что, как я думаю, произошло в вашем случае. Если он был убит, андроид, очевидно, будет вызывать OnCreate, когда вы вернетесь к активности. Check Это для уточнения. Для экспериментов вы можете попробовать открыть несколько приложений из своих последних приложений, а затем вернуться в свое приложение. Теперь он может упасть.

Причина NPE очевидна, ваша вторая активность не имеет значения, и она падает.

Почему у тебя другое поведение !?

Это потому, что намерения запуска различны. Когда вы выключаете «задача», Android просто останавливает ваше приложение, но оставляет его там ( нет гарантии ), если вы хотите переключиться обратно.

Переход домой (с домашним) является явным признаком того, что вы хотите покинуть приложение, и хотя он останется в памяти и кэширован (до тех пор, пока имеется доступная память), возвращаясь через панель запуска (или значок приложения, как вы его называете) ) Запускает категорию LAUNCHER (которая сначала относится к вашей операции 1).

Взгляните на этот вопрос StackOverflow (и ответ), чтобы лучше понять последствия.

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

Переконструируйте приложение, чтобы это не проблема.

Ты говоришь:

«У меня есть 2 действия, вторая активность содержит идентификатор, который я прохожу через намерение (этот момент важен),"

Что ж, почему бы не сделать это проще и иметь ОДНУ деятельность и два фрагмента? Затем используйте аргументы фрагмента для передачи значения?

Или почему бы не сохранить значение в настройках и / или локальной базе данных и восстановить его во время onCreate?

И почему бы не сделать так, чтобы, если Activity 2 не имеет значения, он вызывает Activity 1 и закрывается (лучше, чем сбой, да?).

И т.п.

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

Вы указали, что вы можете видеть, что активность остановлена ​​(onStop), если вы перейдете к настройкам. Это поведение, показанное в жизненном цикле активности Android. Другим элементом onStop является onCreate. Так он делает то, что говорит нам документация. Действия Btw приостанавливаются, если они видны каким-то образом и останавливаются, если они больше не видны. Это объясняет, почему ваша деятельность приостанавливается. Для получения дополнительной информации см. « Управление жизненным циклом деятельности» . Здесь вы можете найти целую картину жизненного цикла.

Этот тип поведения можно увидеть при изменении некоторых системных конфигураций, таких как тип шрифта, размер шрифта или язык. Но включение / выключение Wi-Fi не уничтожит приложение и не воссоздает его снова. Проверьте http://developer.android.com/guide/topics/manifest/activity-element.html#config для получения дополнительной информации.

Intereting Posts
ADB: работа в качестве приложения на корневом устройстве в выпуске Масштабирование в андроиде – сохранение изображения в поле зрения EditText очистить текст при первом фокусе – Android Просмотр локального веб-сервера на Mac с именем компьютера, а не IP-адресом Просмотр файловой системы Raspberry Pi от android через Bluetooth Делают ли внешние библиотеки медленнее приложений? Android: как получить миниатюру видео файла, который является приватным для вашего приложения? Android-Studio: Ошибка: не удалось создать виртуальную машину Java Закрыть строку состояния после уведомления Android-эмулятор полностью разрядился – запуск команды управления telnet, сбой эмулятора APK – Слишком много мест Атрибут «titleTextStyle» уже определен в android studio 1.2.1? Android. Кнопка не выглядит нажатой Как сохранить один экземпляр действия, но иметь возможность обновлять представление? Индикатор загрузки справа в AutoCompleteTextView