Как мне следует бороться с сохранением Android WebView, если моя активность будет уничтожена при показе другой?

StackOverflow https://stackoverflow.com/questions/2508008

  •  22-09-2019
  •  | 
  •  

Вопрос

Я создаю приложение для Android, основанное на расширенном WebView (на основе PhoneGap).Я улучшил WebView, чтобы из запущенного внутри JavaScript вы могли вызвать встроенное средство выбора контактов для выбора номера телефона (который может быть предоставлен Facebook, например).

Проблема, с которой я сталкиваюсь, заключается в том, что собственный средство выбора контактов запускается в activity в другом процессе, и в документах Android говорится, что, пока открыто другое действие, мое activity может быть уничтожено из-за ограничений памяти.На самом деле я не видел, чтобы это происходило в моем приложении, но если бы это произошло, то я предполагаю, что состояние моего WebView было бы уничтожено, и код, который ожидал выбранного контакта, был бы завершен.

Кажется немного сумасшедшим, что действие, запрашивающее контакт, может быть уничтожено, пока открыто средство выбора контактов.Кто-нибудь знает, действительно ли это происходит?Есть ли способ сохранить состояние WebView, если это произойдет?

Спасибо,

-Шон

Это было полезно?

Решение

Кто-нибудь знает, действительно ли это происходит ?

Вы смотрите на проблему слишком просто.

У вас есть WebView.Вы открываете приложение "Контакты".Пока пользователь находится в приложении "Контакты", поступает телефонный звонок.Во время телефонного разговора (с использованием Bluetooth-гарнитуры) приходит текстовое сообщение, поэтому пользователь открывает его из своего уведомления.Все еще разговаривая по телефону и отправляя текстовые сообщения, приходит сообщение со ссылкой, поэтому она нажимает на него и открывает приложение браузера.

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

Итак, это обычное дело?Нет.Однако это также не имеет ничего общего с приложением "Контакты" - если пользователь нажмет кнопку "ДОМОЙ", в какой-то момент в будущем ваша активность может быть уничтожена, чтобы также освободить оперативную память.

Есть ли способ сохранить состояние WebView, если это произойдет?

Это зависит от того, что вы считаете "состоянием WebView" быть.Это действительно работа PhoneGap, если вы создаете приложение на основе PhoneGap.Итак, вы могли бы подумать о том, чтобы спросить их.

Нет никакого способа сохранить DOM.Существуют тривиальные способы сохранения URL-адреса (см. onSaveInstanceState()).И между ними могут быть вещи, которые вы считаете частью "состояния WebView" это может быть или не быть возможным спасти.

Другие советы

Длинный и подробный ответ немного сложен, но по сути он сводится к нескольким моментам:

  • Если ОС Android должна выполнить очистку действий или Служб, она знает, как расставить приоритеты, какие из них должны выполняться в первую очередь.Он делает это в зависимости от того, находятся ли они в данный момент на переднем плане (запускаются последними), в середине выполнения кода, в ожидании результата или просто бездействуют в фоновом режиме (запускаются первыми).Вы можете быть достаточно уверены, что если ваша активность WebView запустила средство выбора контактов с использованием startActivityForResult, оно не будет уничтожено
  • Существует целая система для сохранения данных в случае прекращения действия, такая как метод onPause (который запускается, как только ваше действие покидает передний план), onSaveInstanceState метод, который вызывается, когда ваша активность близка к завершению.Ознакомьтесь с ними, чтобы получить дополнительную информацию, а также метод изменения конфигурации при изменении ориентации экрана.Если вы еще хотя бы бегло не прочитали Жизненный цикл деятельности документ на странице разработчиков, вы должны это сделать.
  • Наконец, я уверен, что этот вопрос рассматривался много раз, но с немного меняющимися формулировками или ситуациями.Оглянитесь вокруг, посмотрите, что еще вы можете найти.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top