
рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛: рдПрдХ рдмрд╛рдЗрдВрдб рд╕реЗрд╡рд╛ рдХреНрдпрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдХреЛ рдШреБрдорд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдлреНрд░реИрдЧрдореЗрдВрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред
рд╣рдордиреЗ рдлрдирдХрд╛рд░реНрдк рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрдорд╛ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
1. рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдХреЗ рдКрдкрд░ рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдШреБрдорд╛рддреЗ рд╣реИрдВ, рддреЛ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
рдЙрджреНрдШрд╛рдЯрди рдЧрддрд┐рд╡рд┐рдзрд┐FirstActivity: onPause
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдХреНрд░рд┐рдПрдЯ
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рджреНрд╡рд┐рддреАрдпрддрд╛: onResume
FirstActivity: onSaveInstanceState
FirstActivity: onStop
рдореЛрдбрд╝рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдкреЙрдЬ
рджреВрд╕рд░реА рд╕рдХреНрд░рд┐рдпрддрд╛: onSaveInstanceState
рджреНрд╡рд┐рддреАрдпрддрд╛: onStop
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдХреНрд░рд┐рдПрдЯ
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛: onRestoreInstanceState
рджреНрд╡рд┐рддреАрдпрддрд╛: onResume
рд╡рд╛рдкрд╕ рд▓реМрдЯреЛрд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдкреЙрдЬ
FirstActivity: onCreate
FirstActivity: onStart
FirstActivity: onRestoreInstanceState
рджреНрд╡рд┐рддреАрдпрддрд╛: onStop
рдФрд░ рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдирд┐рд░реНрдгрдп
рдкрд╛рд░рджрд░реНрд╢реА рд╢реАрд░реНрд╖ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд░реНрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рд░реЛрдЯреЗрд╢рди рдХреЗ рдмрд╛рдж, рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЙрд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдЗрд╕рдХреЗ рдиреАрдЪреЗ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓ рдХрд╛ рдХреНрд░рдо рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛:
рдбрд┐рд╕реНрдХрд╡рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐FirstActivity: onPause
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдХреНрд░рд┐рдПрдЯ
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рджреНрд╡рд┐рддреАрдпрддрд╛: onResume
рдореЛрдбрд╝рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдкреЙрдЬ
рджреВрд╕рд░реА рд╕рдХреНрд░рд┐рдпрддрд╛: onSaveInstanceState
рджреНрд╡рд┐рддреАрдпрддрд╛: onStop
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирдХреНрд░рд┐рдПрдЯ
рд╕реЗрдХрдВрдбрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛: onRestoreInstanceState
рджреНрд╡рд┐рддреАрдпрддрд╛: onResume
FirstActivity: onSaveInstanceState
FirstActivity: onStop
FirstActivity: onCreate
FirstActivity: onStart
FirstActivity: onRestoreInstanceState
FirstActivity: onResume
FirstActivity: onPause
2. рдХреЛрдИ рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рджреГрд╢реНрдп рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдХ рд╣реА рджреГрд╢реНрдп рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд▓реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
"рдмрд╣реБрдд рд╕реБрдЦрдж рдирд╣реАрдВ" рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдХрд╕реНрдЯрдо рджреГрд╢реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рднреАрддрд░ рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдПрдХ рдмреБрд░рд╛ рдХрд╛рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



рдирд┐рд░реНрдгрдп
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рднреА рдЗрд╕ рджреГрд╢реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП
private void addViewInner(View child, int index, LayoutParams params, boolean preventRequestLayout) { ... if (child.getParent() != null) { throw new IllegalStateException("The specified child already has a parent. " + "You must call removeView() on the child's parent first."); } ... }
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк ActivLifecycleCallbacks рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд▓реВ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ onStop (рдирд┐рд╖реНрдХрд╛рд╕рди) рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд▓реЗ рдЦреБрд▓реЗ рдореЗрдВ AddStart (addView) рдЬреЛрдбрд╝реЗрдВред
3. рдЯреБрдХрдбрд╝рд╛ рдЬреЛрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрди рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдлрд╛рдпрджреЗ рдХреНрдпрд╛ рд╣реИрдВ?
рдирд┐рд░реНрдгрдп
рднрд▓реЗ рд╣реА рдЖрдк рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЗрд╕рдХреЗ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП, onDestroyView рдХреЛ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд▓реМрдЯрдиреЗ рдкрд░ onCreateView рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдмрд╣реБрдд рдЦреЗрд▓ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ onDestroyView рдореЗрдВ UI рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЯреБрдХрдбрд╝рд╛ рдФрд░ рджреГрд╢реНрдп (рд╕реВрдЪрд┐рдпреЛрдВ, рдЖрджрд┐) рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреГрд╢реНрдп рдХреЛ рднрд░рдиреЗ рдФрд░ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ (рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрдЧрд╛ред
рд░рд╛рдЬреНрдп рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рднреА рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, onSaveInstanceState рдХрднреА-рдХрднреА onDestroyView рдХреЗ рдмрд╛рдж рдЖрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдЧрд░ null onViewStateRestored рдореЗрдВ рдЖрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд┐рддрд┐ рдкрд░ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд░ рд╣рдо рдРрдб рдФрд░ рд░рд┐рдкреНрд▓реЗрд╕ рдХреЗ рдмреАрдЪ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдореЛрд░реА рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрд┐рдлрд╛рдпрддреА рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧрд╣рд░рд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрддреНрдкрд╛рдж рдХреЗрдкреАрдЖрдИ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧрд╣рд░рд╛рдИ рд╣реИ)ред рдЯреВрд▓рдмрд╛рд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ onCreateView рдХреЗ рдмрд╛рдж рдЖрдк рдЗрд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрдб рдХреЗ рдлрд╛рдпрджреЛрдВ рд╕реЗ: рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдХрдо рд╕рдорд╕реНрдпрд╛рдПрдВ, рдЬрдм рдЖрдк рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рджреГрд╢реНрдп рдХреЛ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
4. рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕реАрдзреЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд╛рдЗрдВрдб рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЧрддрд┐рд╡рд┐рдзрд┐ рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдХреЗрд╡рд▓ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐) рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддреА рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╕реНрдХреНрд░реАрди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕ рд╕реЗрд╡рд╛ рд╕реЗ рд░рд┐рдмрд╛рдЙрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реЗрд╡рд╛ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдореЛрдбрд╝ рдХреЗ рдмрд╛рдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рд╣реЛрдЧреАред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬрдм рдЖрдк рд╕реЗрд╡рд╛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрд╡ рд░рд╣рддрд╛ рд╣реИ?
рдирд┐рд░реНрдгрдп
рдпрджрд┐ рдЖрдк рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдХреЗрд╡рд▓ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ:
@Override protected void onDestroy() { super.onDestroy(); ThreadsUtils.postOnUiThread(new Runnable() { @Override public void run() { unbindService(mConnection); } }); }
5. рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдордиреЗ рд╕рд┐рдВрдЧрд▓ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА (рдЙрдкрд▓рдмреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдкрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ред рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдХреНрд░реАрди рдПрдХ рдЕрд▓рдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдереА, рдЕрдм рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЯреБрдХрдбрд╝реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдХреЗ рдмреАрдЪ рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд▓реМрдЯрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд░рд╛рджреЗ рдЭрдВрдбреЗ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рдвреЗрд░ рдХреЗ рдмреАрдЪ рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдХреИрд╕реЗ рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реВрдВ?
рдирд┐рд░реНрдгрдп
рд╣рд╛рдВ, FragmentManager рдмреЙрдХреНрд╕ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕рд░реЛрди рдЕрдкрдиреЗ рднреАрддрд░ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ:
protected void backTo(BackTo command) { String key = command.getScreenKey(); if (key == null) { backToRoot(); } else { int index = localStackCopy.indexOf(key); int size = localStackCopy.size(); if (index != -1) { for (int i = 1; i < size - index; i++) { localStackCopy.pop(); } fragmentManager.popBackStack(key, 0); } else { backToUnexisting(command.getScreenKey()); } } }
6. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рдордиреЗ ViewPager рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдХреБрд╢рд▓ рдФрд░ рдЬрдЯрд┐рд▓ рдШрдЯрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдЖрдВрддрд░рд┐рдХ рдЕрдВрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред RecycleView рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдВрджрд░ рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
рдирд┐рд░реНрдгрдп
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЬреЛрдбрд╝рд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рдЗрд╕рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВред ViewPager рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗрдЯрдпреВрдЬрд╝рд░рд╡рд┐рдЬрд┐рд╣рд┐рдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ RecycleView рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреГрд╢реНрдпрддрд╛ рдФрд░ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рдм рдХреБрдЫ рдорд╛рдереЗ рдХрд░рддрд╛ рд╣реИред
7. рд╕рднреА рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдордиреЗ ViewPager рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рд╣рдо рд░рд╛рдЬреНрдп рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдПред рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рд╣рдордиреЗ рдмрд╕ onSaveInstanceState рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдмрдВрдбрд▓ рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрд╛ред рдЬрдм рдЖрдк ViewPager рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЯреБрдХрдбрд╝реЗ FragmentManager рджреНрд╡рд╛рд░рд╛ рдмрд╣рд╛рд▓ рдХрд░ рджрд┐рдП рдЧрдП рдФрд░ рдЕрдкрдирд╛ рд░рд╛рдЬреНрдп рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ред RecycleView рдФрд░ рдЗрд╕рдХреЗ ViewHolder рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдирд┐рд░реНрдгрдп
"рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛," рдЖрдк рдХрд╣рддреЗ рд╣реИрдВред рдпрд╛ рдмрдЪрдд рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдмрд╛рд╣рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕реВрдЪреА рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реВрдЪреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрдЯрд┐рд▓ рд╕реНрдХреНрд░реАрди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХреЛ "рд╡реНрдпреВрдкреЗрдЬрд░ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рддрд░реНрдХ рдХрд░рдирд╛" рдХреА рд╢реИрд▓реА рдореЗрдВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рдерд╛:
рдЕрдиреБрдХреВрд▓рдХ public class RecycleViewGalleryAdapter extends RecyclerView.Adapter<GalleryItemViewHolder> implements GalleryAdapter { private static final String RV_STATE_KEY = "RV_STATE"; @Nullable private Bundle mSavedState; @Override public void onBindViewHolder(GalleryItemViewHolder holder, int position) { if (holder.isAttached()) { holder.detach(); } holder.attach(createArgs(position, getItemViewType(position))); restoreItemState(holder); } @Override public void saveState(Bundle bundle) { Bundle adapterState = new Bundle(); saveItemsState(adapterState); bundle.putBundle(RV_STATE_KEY, adapterState); } @Override public void restoreState(@Nullable Bundle bundle) { if (bundle == null) { return; } mSavedState = bundle.getBundle(RV_STATE_KEY); } private void restoreItemState(GalleryItemViewHolder holder) { if (mSavedState == null) { holder.restoreState(null); return; } String stateKey = String.valueOf(holder.getGalleryItemId()); Bundle state = mSavedState.getBundle(stateKey); if (state == null) { holder.restoreState(null); mSavedState = null; return; } holder.restoreState(state); mSavedState.remove(stateKey); } private void saveItemsState(Bundle outState) { GalleryItemHolder holder = getCurrentGalleryViewItem(); saveItemState(outState, (GalleryItemViewHolder) holder); } private void saveItemState(Bundle bundle, GalleryItemViewHolder holder) { Bundle itemState = new Bundle(); holder.saveState(itemState); bundle.putBundle(String.valueOf(holder.getGalleryItemId()), itemState); } }
Fragment.onSaveInstanceState рдкрд░ рд╣рдо рдЙрди рдзрд╛рд░рдХреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкрдврд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдВрдбрд▓ рдореЗрдВ рд░рдЦреЗрдВред рдзрд╛рд░рдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдмрдЪрд╛ рд╣реБрдЖ рдмрдВрдбрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдСрдирдмреЛрд░реНрдб рд╡реНрдпреВ рдкрд░ рд╣рдо рдзрд╛рд░рдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдкрд╛рдП рдЧрдП рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
8. рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЦрддрд░рд╛ рд╣реИ?
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); ViewGroup root = findViewById(R.id.default_id); ViewGroup view1 = new LinearLayout(this); view1.setId(R.id.default_id); root.addView(view1); ViewGroup view2 = new FrameLayout(this); view2.setId(R.id.default_id); view1.addView(view2); ViewGroup view3 = new RelativeLayout(this); view3.setId(R.id.default_id); view2.addView(view3); }
рдирд┐рд░реНрдгрдп
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред рдЙрд╕реА RecycleView рдореЗрдВ, рдПрдХ рд╣реА рдЖрдИрдбреА рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣рд╛рдБ рдЕрднреА рднреА рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╣реИ:
@Override protected <T extends View> T findViewTraversal(@IdRes int id) { if (id == mID) { return (T) this; } final View[] where = mChildren; final int len = mChildrenCount; for (int i = 0; i < len; i++) { View v = where[i]; if ((v.mPrivateFlags & PFLAG_IS_ROOT_NAMESPACE) == 0) { v = v.findViewById(id); if (v != null) { return (T) v; } } } return null; }
рдпрд╣ рдзреНрдпрд╛рди рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╣реА рдЖрдИрдбреА рд╡рд╛рд▓реЗ рддрддреНрд╡ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдкрд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрд╢рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ findViewById рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
9. рдЬрдм рдЖрдк рд╕реНрдХреНрд░реАрди рдХреЛ рдШреБрдорд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд░реЗрд╢рди рд╕реЗ рдЧрд┐рд░ рдЬрд╛рддреЗ рд╣реИрдВ (рд╣рд╛рдВ, рдпрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ ViewPager рдЕрднреА рднреА рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рджреЛрд╖реА рд╣реИ)ред рдЕрдкрд░рд╛рдзреА рдХреЛ рдХреИрд╕реЗ рдвреВрдВрдвреЗ?
рдирд┐рд░реНрдгрдп
рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ ActivLifecycleCallbacks рд▓рдЯрдХрд╛рдПрдВ, рд╕рднреА onActivitySaveInstanceState рдХреЛ рдкрдХрдбрд╝реЗрдВ рдФрд░ рдмрдВрдбрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╕рдм рдХреБрдЫ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред рд╡рд╣рд╛рдВ рдЖрдк рдЗрд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рджреГрд╢реНрдпреЛрдВ рдФрд░ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрдВрдбрд▓ рд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рд░рд╛рдЬреНрдп рдХреИрд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ:
fun Bundle.getFragmentsStateList(): List<FragmentBundle>? { try { val fragmentManagerState: FragmentManagerState? = getParcelable("android:support:fragments") val active = fragmentManagerState?.mActive ?: return emptyList() return active.filter { it.mSavedFragmentState != null }.map { fragmentState -> FragmentBundle(fragmentState.mClassName, fragmentState.mSavedFragmentState) } } catch (throwable: Throwable) { Assert.fail(throwable) return null } } fun init() { application.registerActivityLifecycleCallbacks(object : SimpleActivityLifecycleCallback() { override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) { super.onActivitySaveInstanceState(activity, outState) outState?.let { ThreadsUtils.runOnMainThread { trackActivitySaveState(activity, outState) } } } }) } @MainThread private fun trackActivitySaveState(activity: Activity, outState: Bundle) { val sizeInBytes = outState.getSizeInBytes() val fragmentsInfos = outState.getFragmentsStateList() ?.map { mapFragmentsSaveInstanceSaveInfo(it) } ... }
рдЕрдЧрд▓рд╛, рд╣рдо рдмрд╕ рдмрдВрдбрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ:
fun Bundle.getSizeInBytes(): Int { val parcel = Parcel.obtain() return try { parcel.writeValue(this) parcel.dataSize() } finally { parcel.recycle() } }
10. рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдФрд░ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рд╣рдореЗрдВ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдФрд░ рдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдпреЛрдЧ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ)ред рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?
рдирд┐рд░реНрдгрдп
рдмреЗрд╢рдХ, рдЖрдк рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрд░рд╛рджреЗ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ "рдмреИрд╕рд╛рдЦреА" рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдмрд╣реБрдЖрдпрд╛рдореА рд╡рд┐рдзрд┐ рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрдЪреНрдЫреЗ рдЬреАрд╡рди рд╕реЗ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреИрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдЗрдВрдЯрд░рд╡реНрдпреВ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ - рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛!