воскресенье, 21 июня 2015 г.

Можливо ви не знали: onResumeFragments

Вся суть в одному реченні: якщо ви використовуєте підкласи FragmentActivity (такі як AppCompatActivity) і думаєте над якимись транзакціями в onResume, краще зробіть це в onResumeFragments.
Якщо ви відчуваєте, що бачите деякі прогалини чи неточності в своїх знаннях, запрошую до читання. В іншому випадку сподіваюсь здивувати вас наступного разу.

Все ще тут? Добре.
В чому різниця між onResume та onResumeFragments? З документації для FragmentActivity.onResume:

Dispatch onResume() to fragments. Note that for better inter-operation with older versions of the platform, at the point of this call the fragments attached to the activity are not resumed. This means that in some cases the previous state may still be saved, not allowing fragment transactions that modify the state. To correctly interact with fragments in their proper state, you should instead override onResumeFragments().

Простіше кажучи, ви не можете бути впевнен, що існуючий фрагмент актівіті буде відновлений в актівіті onResume(), і краще уникнути транзакцій фрагментів до onResumeFragments, поки їх стан не поновлено і вони повністю не відновлені.
Притримуючись сказаного ви можете уникнути IllegalStateException, який Android викидає кожного разу як ви намагаєтесь виконати транзакцію з фрагментом після того/, як його стан був збережений (через onSaveInstanceState). Якщо актіві фрагменту знищено і перестворено, ви втратите всі вподальному збережені дані. Для більш повного та детального пояснення, пропоную прочитати статтю, Alex Lockwood's "Fragment Transactions & Activity State Loss".
Правду кажучи, я дізнався про onResumeFragments задовго після того як дізнався про фрагменти та транзакції між ними. Більшість матеріалів по життєвому циклу актівіті опускає його оскільки він існує тільки в FragmentActivity в біблітоці підтримки (FragmentActivity), а не в класі SDK актівіті. Однак, onResumeFragments краще, все ж таки, знати.
Після всйого сказаного, хочу додати, що все ж кращу уникати транзакцій між фрагментамив життєвому циклі актівіті настільки наскільки це можливо і особливо в onResume/onResumeFragments це скоріше гарна підказка для вашої бізнес логіки та UI/UX аніж правило.

Зустрінимось.

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

Отправить комментарий