Внутри/междеятельностное общение

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

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

Это кажется плохой практикой, поэтому мои вопросы:

1) Для интерактивного общения постоянно используются дополнительные намерения и статические переменные для передачи данных, хорошо?

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

Если это слишком самоуверенно или абстрактно, я закрою это.


person dylan7    schedule 06.01.2016    source источник


Ответы (1)


1) Использование намерения в порядке. Насчет глобальных переменных я так не думаю. Значения могут быть потеряны, когда ваше приложение будет воссоздано после того, как система Android решит освободить часть памяти. Почему бы не сохранить данные в SharedPreferences или SQLite?

2) Переменная полей (и классов) - это обычный способ использования (и довольно хорошая практика для таких случаев, как не использовать findViewById все время). Если вы хотите сохранять данные между воссозданием активности, почему бы не использовать предоставленную инфраструктурой Android (https://developer.android.com/training/basics/activity-lifecycle/recreating.html)?

Сохраните необходимые данные (такие как идентификаторы элементов, значения и т. д.) в пакете и восстановите их впоследствии.

public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstance.putInt(some_key,value);
}

и восстановить в onCreate или onRestoreInstanceState.

person aelimill    schedule 06.01.2016