Управление приложением при нажатии кнопки питания и возврат к приложению

#android

#Android

Вопрос:

У меня есть приложение, которое отлично работает на моем телефоне (desire HD). Когда я нажимаю кнопку питания и возвращаюсь в приложение, данные не были сброшены.

Пользователь отправил мне запрос на то, чтобы при нажатии кнопки питания (dell streak) и возврате в приложение собираемые данные сбрасывались.

Я уже сохраняю данные в объекте, если нажата кнопка возврата

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

Спасибо за ваше время

Ответ №1:

Скорее всего, ваша активность прекращается в фоновом режиме. Я полагаю, что Dell Streak более подвержен этому, поскольку его более старое устройство по сравнению с HD и, вероятно, имеет меньше оперативной памяти, я не уверен, сколько занимает любая настройка Dell (если таковая имеется).

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

Какие данные сбрасываются? Получены ли эти данные удаленно? Существует несколько способов борьбы с этой проблемой.

Одним из них является сохранение состояния пользовательского интерфейса при завершении действия, см. onSaveInstanceState (Bundle)

Смотрите Здесь дополнительную информацию о сохранении данных, которая охватывает базы данных и общие префы, которые являются двумя альтернативами сохранению состояния приложения (или состояния пользовательского интерфейса в некоторых случаях) для onSaveInstanceState() метода, упомянутого выше. Это действительно зависит от того, что вы делаете 🙂

Кроме того, запускаются ли какие-либо операции удаленного сбора данных в методах жизненного цикла (например, onCreate()) этого действия? Для вашего приложения может быть лучшая архитектура, если это так, скажите, где метод жизненного цикла просто запускает запрос на условное обновление на основе времени, который завернут в a Service (который также с меньшей вероятностью будет уничтожен в фоновом режиме), который просто обновит некоторые данные модели (в mem или с поддержкой базы данных), которые пользовательский интерфейсможет быть заполнено из, но имеет то преимущество, что оно также сохраняется, так что, когда ваша активность будет отключена, оно будет прозрачным для пользователя!

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: я просто подумал, что если вы сохраняете состояние при нажатии кнопки «Назад» и используете это сохраненное состояние для сброса состояния пользовательского интерфейса при вызове onResume или OnStart, возможно, вы просто полностью очищаете состояние, если действие было переведено в фоновый режим (но не убито) от любого другого действия, кроменажатие обратного байта, поскольку ваш сохраненный объект состояния будет пустым / нулевым / содержать значения по умолчанию? Если это так, то вышеуказанные подходы по-прежнему актуальны

Комментарии:

1. При нажатии назад я переопределяю это, сохраняя некоторые данные (String, ArrayList) в объект. Возвращаясь к экрану, я возвращаю данные обратно. Если я использую onPause / onResume, когда они вызываются, в основном onResume. Вызывает ли это, когда действие создается в первый раз или только при возобновлении. Спасибо

2. Ознакомьтесь со ссылкой жизненного цикла выше. onResume будет вызываться всякий раз, когда действие возвращается на передний план. Вам следует рассмотреть возможность простой настройки пользовательского интерфейса из объектов вашей модели в onCreate / OnStart / onResume и сохранения состояния либо при манипулировании элементами пользовательского интерфейса, либо с помощью onSaveInstanceState и переопределения кнопки «Назад»

3. Начнет изучать это. Как бы я воспроизвел это на эмуляторе, поскольку он отлично работает на моем телефоне. Спасибо

4. Два способа: 1) поворот эмулятора (CTRL F12) вызовет вызов OnSave … и onRestore … 2) в эмуляторе перейдите в Инструменты разработчика; Настройки разработки; нажмите на выпадающий список «Ограничение процесса приложения» и установите его равным 1. Запустите приложение, нажмите «Домой», затем запустите «Контакты» или какое-нибудь простое приложение. Вы можете увидеть сообщение об уничтожении в logcat (взято из androidacademy.com/forum/8-development /… ).

Ответ №2:

Вероятно, вы захотите переопределить методы onPause () и onResume() вашей активности.