1

В землях Android Фрагменты знают о жизненном цикле Android и не уничтожаются при восстановлении активности. Из-за этого я видел людей, использующих пустые фрагменты, чтобы обойти проблемы с жизненным циклом Android, уничтожая ссылки на фоновые задачи и предотвращая утечки, связанные с сохранением ссылок на действия.Сколько накладных расходов связано с Android Fragment?

Мне было интересно, сколько накладных расходов связано с использованием Фрагментов в качестве крючков для фоновых задач? Я предполагаю, что Android решает не уничтожать фрагменты, потому что они дороги для воссоздания (может быть, и не так).

Bonus вопрос. Есть ли способ оценить эту стоимость? (возможно, внедрение альтернативных методов и проверка использования ресурсов).

ответ

1

Вам не следует использовать «безгласный фрагмент» для фоновой работы.

Правильный способ заключается в использовании Loader или Service (или Intent Service) в зависимости от продолжительности и типа работ, которые необходимо выполнить.

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

1

Do неFragment s для сохранения жизней! Это принесет больше вреда, чем использование.

Если у вас есть задачи, работающие достаточно долго, чтобы вы могли волноваться, если их убили, запустите их в Service.

Это точно, что Service (или Loader) для. Fragment s должен представлять собой часть вашего макета, а не использоваться без головы.

Нет причин для взлома, если существует рабочее и предполагаемое решение.

+1

Каким образом это принесет больше вреда? Эти задачи не применимы для работы службы. Я бы предпочел использовать погрузчиков, но им было сказано избегать их. – fergdev

+1

Вы создаете неинтуитивную конструкцию, которая может не работать в будущем. Также другим программистам будет сложно понять ваш код. Несмотря на то, что он может работать сейчас, это, вероятно, будет стоить времени в будущем. Также нет задачи, которую можно запустить в AsyncTask, но не в сервисе. – F43nd1r

+0

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

Смежные вопросы