У меня есть следующие требования безопасности для моего приложения:

Убедитесь, что приложение удаляет конфиденциальные данные из представлений в фоновом режиме.

У меня вопрос: Android удаляет данные из представлений, когда они находятся на заднем плане?

Что я знаю по документации для Android, так это:

По умолчанию система использует состояние экземпляра Bundle для сохранения информации о каждом объекте View в макете вашей деятельности (например, текстовое значение, введенное в виджет EditText).

Одним из решений является то, что я могу очистить все виды, а затем использовать следующий подход для сохранения состояния

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}  

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first

    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
    } else {
        // Probably initialize members with default values for a new instance
    }
    // ...
}

Но я понятия не имею, очищает ли Android OS данные в представлениях. Любая помощь будет оценена.

Благодарность

1
Piyush Kukadiya 21 Авг 2018 в 11:15

3 ответа

Лучший ответ

Android не автоматически перерабатывает ваш вид, как только приложение переходит в фоновый режим.

Система убивает процессы, когда ей нужно освободить ОЗУ; вероятность того, что система уничтожит данный процесс, зависит от состояния процесса в данный момент.

Он просто перезаписывает представления, если решил убить их или нуждается в памяти. Или после изменения конфигурации.

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

В целом я думаю, что у вас был правильный подход.

И просто используйте onStop() (а не onPause() из-за некоторых диалогов и других взаимодействий, которые убирают фокус с вашей активности), чтобы очистить ваши представления, если хотите.

3
shkschneider 21 Авг 2018 в 08:30

Взгляните на жизненный цикл активности Android https://developer.android.com/ руководство / компоненты / мероприятия / деятельность , жизненный цикл

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

0
max meijer 21 Авг 2018 в 08:20

Нет, он не удаляет данные, потому что, согласно жизненному циклу Android, когда вы выполняете фоновые представления, вызываются onPause () и onResume (), а ваши представления и их экземпляры находятся в методе onCreate ().

Таким образом, запуск представлений из фона не удаляет ваши данные представлений.

0
Pang 21 Авг 2018 в 08:27
51944417