рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ рдлрд╝реАрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реНрд▓рд┐рдк рдХрд░рддрд╛ рд╣реИ, рд╡реАрдбрд┐рдпреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЬреИрд╕реЗ рдбрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рддреЗрдЬ рдФрд░ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рде рд╣реИред рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЗрдк рддрдХ рдирд╣реАрдВ рдЬрд╛ рдкрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕реАрд▓ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдФрд░ рдкреВрд░рд╛ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдЧрд▓рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдЪрд▓рддрд╛ рд╣реИред
AppsConf рдкрд░
Stepan Goncharov рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ
, рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ
рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВрдЧреЗ: рд╣рдо рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░реЗрдВрдЧреЗ, рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкрд░рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд╣рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдпрд╣ рднреА рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреА рдЕрдкрдиреА рдЖрдИрдбреА рд╣реЛрддреА рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рд░рдгрдиреАрддрд┐ рдХреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реЗ рдкреВрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдФрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдкреАрдХрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: Stepan Goncharov (
stepango ) рдЧреНрд░реИрдм рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЙрдмреЗрд░ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рджрдХреНрд╖рд┐рдг рдкреВрд░реНрд╡ рдПрд╢рд┐рдпрд╛ рдореЗрдВред рд╡рд╣ 9 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ Android рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред 2014 рд╕реЗ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ 2016 рдХреЗ рдмрд╛рдж рд╕реЗ - рдЗрд╕реЗ рдареЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рдВрдЧрд╛рдкреБрд░ рдореЗрдВ рдХреЛрдЯрд▓рд┐рди рдпреВрдЬрд░ рдЧреНрд░реБрдк рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рддред рдпрд╣ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рднреА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЛрдЯрд▓рд┐рди рдкрд░ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдлреИрд╢рдиреЗрдмрд▓ рд╣реИред
рд╣рдо рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдореЗрдВ рдирдП рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдирдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдИрдУрдПрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ 2014 рд╕реЗ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ - рдЖрдк рд╕реНрд╡рд┐рдлреНрдЯ, рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП
рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛рдПрдВ рдЕрдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЖрджрд┐рдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрд░рдПрдХреНрд╕ - рднрд╡рд┐рд╖реНрдп рдФрд░ рд╡рд╛рджреЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рд╕рдм рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
RX рдореБрджреНрджреЛрдВ
рдЙрдЪреНрдЪ рдкреНрд░рд╡реЗрд╢ рджрд╣рд▓реАрдЬ ред рдЖрд░рдПрдХреНрд╕ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдФрд░ рдмрдбрд╝рд╛ рд╣реИ - рдЗрд╕рдореЗрдВ 270 рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ, рдФрд░ рдкреВрд░реА рдЯреАрдо рдХреЛ рдпрд╣ рд╕рд┐рдЦрд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред
рдЖрд░рдПрдХреНрд╕ рдореЗрдВ, рдЖрдкрдХреЛ
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
, рд╕рд╛рде рд╣реА рдЖрд╡реЗрджрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд┐рдВрдЧрд▓ рдпрд╛ рдСрдмреНрдЬрд░реНрд╡ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рддреЛ
рдЖрдк рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп SIngle рд╕реЗ рдирд╣реАрдВ рдХрд░
рд╕рдХрддреЗ , рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рд╣реЛрдВрдЧреЗред
рдЖрд░рдПрдХреНрд╕ рдореЗрдВ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ ред
рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 1: рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд░рдирд╛
рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдФрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдФрд░ рдПрдХ рд╕реЗрд╡ рдмрдЯрди рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рд╣реИред рдЬрдм рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдлреЙрд░реНрдо рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХрдИ рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рд╕рдорд╛рди рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред рд╣рдордиреЗ рдХреНрдпреВрдП рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рджрд┐рдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕реЗрдХрдВрдб рдореЗрдВ 40 рдмрд╛рд░ рджрдмрд╛рдпрд╛ - рд╣рдореЗрдВ 40 рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реБрдП, рдХреНрдпреЛрдВрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ? рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рддрд░реАрдХрд╛ рд╣реЛрддрд╛ рд╣реИ: рдПрдХ рдкрд░ рдПрдХ
debounce
, рджреВрд╕рд░рд╛ рдмрдЯрди рдкрд░
clickable = false
рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреЗ рдмрдЧ рдпрд╛ рддреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ рдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рддрднреА рдХрд░рддреЗ рд╣реИрдВ рдЬрдм QA рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ: "рдУрд╣, рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рдЯреВрдЯ рдЧрдпрд╛"!
рдПрдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕рдорд╛рдзрд╛рди?
рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрд░рдПрдХреНрд╕ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдврд╛рдВрдЪреЗ рдХреЛ рд▓рдкреЗрдЯреЗрдВрдЧреЗ -
рд╣рдо рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ - рд╣рдореЗрдВ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рддрд░реАрдХрд╛ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рд░реИрдкрд░ рдХреЛ "рдЕрдзрд┐рдирд┐рдпрдо" рдХрд╣рддреЗ рд╣реИрдВ - рдЕрдиреНрдп рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛
typealias
рдФрд░ рдПрдХ рд╕рд░рд▓
interface
рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реИ:
typealias Id = String interface Act { val id: Id }
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рдЕрдЧрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗред рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдХреЛрдб рдореЗрдВ, рд╣рдо рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рддрдереНрдп рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЬрд╛рд╡рд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдВрджрд░
getId()
рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рд╕рдорд╛рдзрд╛рди рд╣реИ,
getId()
рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗред
рд╣рдо рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░реЗрдВрдЧреЗ?
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рджреЛ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред рдкрд╣рд▓рд╛
рдШрдЯрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рд╣реИ ред рдпрд╣ рдХреЛрдб рд▓реЗрдЦрди рдкрд░ рдмрд╛рд░реАрдХ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдПрдХ рдмрдбрд╝рд╛ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмреБрд░рд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдШрдЯрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдмреИрд╕рд╛рдЦреА рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рдЫреЛрдЯреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЪрд░рдгреЛрдВ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВред рджреВрд╕рд░рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рдмрд╛рдж
рд╕рдВрдЪрд╛рд▓рди рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ
рджреЛрд╣рд░рд╛рдирд╛ рд╣реИ ред
рдкрд░реНрдпрд╛рдкреНрдд рдЖрдИрдбреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рд╣рдордиреЗ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдпрд╛ - рд╣рдордиреЗ рдПрдХ рдЖрдИрдбреА рдЬреЛрдбрд╝рд╛, рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдерд╛ - рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдлрд╝реАрд▓реНрдбред рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдВрдЪрд╛рд▓рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдо рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ рдФрд░ рдпрд╣ рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╣реИ
рдирдпрд╛ рдЕрдореВрд░реНрддрддрд╛ ред
рдирдП рдЕрдВрд╢ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ: MapDisposable
рдЖрдкрдХреЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╕рд╣реА рдирд╛рдо рдФрд░ рдЕрдореВрд░реНрдд рдЪреБрдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЪреВрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрд░рдПрдХреНрд╕ рдкрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдорд╛рди рдЖрд░рдПрдХреНрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рдирд╛рдо рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдХрдВрдкреЛрдЬрд┐рдЯрдбрд┐рдкреЗрдмрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦреЗрдВред
рдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ MapDisposable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВ
рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдФрд░
рдХреЙрд▓ рдбрд┐рд╕реНрдкреЛрдЬрд╝
() рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ
рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛред рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдЖрдк
рдореЗрд░реЗ рдЧрд┐рдЯрд╣рдм рдкрд░ рд╕рднреА рд╕реНрд░реЛрддреЛрдВ
рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо MapDisposable рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдХ рдореИрдк рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрдВрдкреЛрдЬрд┐рдЯреЛрд╕рд┐рдкреЗрдмрд▓ рдЧреБрдг рд╣реЛрдВрдЧреЗред
рдирдП рдЕрдВрд╢ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ: ActExecutor
рдЕрдЧрд▓рд╛ рд╕рд╛рд░ рдШрдЯрдХ
ActExecutor рд╣реИред рдпрд╣ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдореИрдкрдбрд┐рд╕рдкреЛрдЬреЗрдмрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдирд╛рдо рдХреИрд╕реЗ рдЪреБрдиреЗрдВ -
рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ ред
JDK рд╕реЗ рдирд┐рдХрдЯрддрдо рд╕рд╛рджреГрд╢реНрдп рд▓реЗрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдПрдХреНрдЬрд┐рдХреНрдпреВрдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдереНрд░реЗрдб рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдШрдЯрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВред
рд╣рдо рд╕рд░рд▓ рдЫреЛрдЯреЗ рдХрджрдореЛрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдПрдХреНрдЯрдПрдХреНрд╕реНрдпреВрдЯрд░ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВред рдирд╛рдо рд╣реА рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХреБрдЫ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред ActExecutor рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо
Act
рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдХреЗрд╡рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред
interface ActExecutor { fun execute( act: Act, e: (Throwable) -> Unit = ::logError) } interface MapDisposable { fun contains(id: Id): Boolean fun add(id: Id, disposable: () -> T) fun remove(id: Id) }
MapDisposable рднреА рд╕реАрдорд┐рдд рд╣реИ: рдореИрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЗрдВ рдФрд░
contains
рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ,
add
рдФрд░
remove
ред
add
рдореЗрдердб рдореЗрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ: рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╕реБрдВрджрд░рддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЛрджрд░ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд
рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╣рдордиреЗ рд╕рднреА рдЗрдВрдЯрд░рдлреЗрд╕ рдШреЛрд╖рд┐рдд рдХрд┐рдП рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╕рд░рд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рдХрдВрдкреНрд▓реАрдЯрдЯреЗрдмрд▓ рдПрдХреНрдЯ рдФрд░
рд╕рд┐рдВрдЧрд▓рдПрдХреНрдЯ рд▓реЗрдВред
class CompletableAct ( override val id: Id, override val completable: Completable ) : Act class SingleAct<T : Any>( override val id: Id, override val single: Single<T> ) : Act
рдХрдВрдкреНрд▓реАрдЯрдЯреЗрдмрд▓ рдПрдХреНрдЯ рдХрдореНрдкреНрд▓реАрдЯрдЯреЗрдмрд▓ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдмрд╕ рдПрдХ рдЖрдИрдбреА рд╢рд╛рдорд┐рд▓ рд╣реИ - рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╕рд┐рдВрдЧрд▓рдПрдХреНрдЯ рд▓рдЧрднрдЧ рдПрдХ рдЬреИрд╕рд╛ рд╣реИред рд╣рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлреНрд▓реЛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рд┐рдВрдЧрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░
<T : Any>
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ред рдХреЛрдЯрд▓рд┐рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдиреЙрди-рдирд╛рд▓ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рд╣рдо рдЙрд╕реА рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
class ActExecutorImpl ( val map: MapDisposable ): ActExecutor { fun execute( act: Act, e: (Throwable) -> Unit ) = when { map.contains(act.id) -> { log("${act.id} - in progress") } else startExecution(act, e) log("${act.id} - Started") } }
рд╣рдо рдПрдХ рдирдХреНрд╢рд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЗрд╕реЗ рдореИрдк рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж: рддреНрд░реБрдЯрд┐ рдпрд╛ рд╕рдлрд▓рддрд╛, рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
рдмрд╣реБрдд рдЪреМрдХрд╕ рдХреЗ рд▓рд┐рдП - рдХреЛрдИ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди GitHub рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИред
fun startExecution(act: Act, e: (Throwable) -> Unit) { val removeFromMap = { mapDisposable.remove(act.id) } mapDisposable.add(act.id) { when (act) { is CompletableAct -> act.completable .doFinally(removeFromMap) .subscribe({}, e) is SingleAct<*> -> act.single .doFinally(removeFromMap) .subscribe({}, e) else -> throw IllegalArgumentException() } }
рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЛрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╕реБрдВрджрд░ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рд╕рд╣рдпреЛрдЧреА рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВрдЧреЗред
рд╣рдо рдХреБрдЫ рдФрд░ рдХреЛрдЯрд▓рд┐рди рдЪрд┐рдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХрдВрдкреНрд▓реАрдЯрдЯреЗрдмрд▓ рдФрд░ рд╕рд┐рдВрдЧрд▓ рдХреЗ рд▓рд┐рдП
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЙрдирдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдПрдХ рдХрдВрдкреНрд▓реАрдЯрдЯреЗрдмрд▓ рдПрдХреНрдЯ рдФрд░ рд╕рд┐рдВрдЧрд▓рдПрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреИрдХреНрдЯреНрд░реА рдореЗрдердб рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреА рд╣реЛрдЧреА - рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдВрдЧреЗред
fun Completable.toAct(id: Id): Act = CompletableAct(id, this) fun <T: Any> Single<T>.toAct(id: Id): Act = SingleAct(id, this)
рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рд╣рдордиреЗ рдХрдИ рдШрдЯрдХреЛрдВ рдФрд░ рдмрд╣реБрдд рд╕рд░рд▓ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЬреЛ рдореБрдЦреНрдп рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣
рдХрд┐рд╕реА рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╣рд╛рде рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ ред рдЬрдм рд╣рдо рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╣рдо рдЗрд╕реЗ рдПрдХреНрдЬрд┐рдХреНрдпреВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде - рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
fun act() = Completable.timer(2, SECONDS).toAct("Hello") executor.apply { execute(act()) execute(act()) execute(act()) } Hello - Act Started Hello - Act Duplicate Hello - Act Duplicate Hello - Act Finished
рд╣рдо рдПрдХ рдмрд╛рд░ рдЯреАрдо рдХреЗ рднреАрддрд░ рд╕рд╣рдордд рд╣реБрдП рдереЗ, рдФрд░ рдЕрдм рд╣рдореЗрд╢рд╛ рдПрдХ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдЕрдм рдЖрдЗрдП рдЗрд╕реЗ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред
рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 2: рдХрд┐рд╕ рдХрд╛рд░реНрдп рдХреЛ рд░рджреНрдж рдХрд░рдирд╛ рд╣реИ?
рд╕рд╛рде рд╣реА рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ
рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ
рд░рджреНрдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╣рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХреА рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдкреНрд░реЗрд╖рдг рдХрд╛рдлреА рд╕рдордп рд▓рдЧрд╛ рдФрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖред рд╣рдордиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ рдЙрд╕реА рдЕрдиреБрд░реЛрдз рдХреЛ рднреЗрдЬрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрдИрдбреА рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ - рджреВрд╕рд░реЗ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдФрд░
рдкрд┐рдЫрд▓рд╛ рдЕрдиреБрд░реЛрдз рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░рджреНрдж рдХрд░реЗрдЧрд╛ред рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдордЭреЗрдВ рдХрд┐ рд╣рдо рд╕рднреА рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдХрд╛рд░реНрдп рдХреЛ рд░рджреНрдж рдХрд░рдирд╛ рд╣реИ, рдХреИрд╕реЗ рдирд╣реАрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред
рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВ
рд╣рдо рдХреНрд╡реЗрд░реА рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ:
рд░рдгрдиреАрддрд┐рд╣рд╛рд░реНрдб рдФрд░
рд░рдгрдиреАрддрд┐ ред рд╣рдо 2 рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдХрд┐рд╕ рд░рдгрдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред
interface StrategyHolder { val strategy: Strategy } sealed class Strategy object KillMe : Strategy() object SaveMe : Strategy()
рдореИрдВ
рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ - рдореБрдЭреЗ
рд╕реАрд▓рдмрдВрдж рд╡рд░реНрдЧ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ ред рд╡реЗ рд╣рд▓реНрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдХрдо рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддреЗ рд╣реИрдВред
рд╕реАрд▓рдмрдВрдж рд╡рд░реНрдЧ рдХреЛ рдХрдо рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдореМрдЬреВрджрд╛ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛, рдЕрдм рд╡рд╣ рд╕реНрдЯреНрд░реЗрдЯреЗрдЬреА рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ, рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХрдВрдкреНрд▓реАрдЯрдЯреЗрдмрдХреНрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣рдо рдПрдХ рдФрд░
override
рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рд╣реЗрдВрдЧреЗред
interface Act : StrategyHolder { val id: String } class CompletableAct( override val id: String, override val completable: Completable, override val strategy: Strategy = SaveMe ) : Act
рд░рдгрдиреАрддрд┐
рдореИрдВрдиреЗ
SaveMe рд░рдгрдиреАрддрд┐
рдЪреБрдиреА , рдЬреЛ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддреА рд╣реИред рдпрд╣ рд░рдгрдиреАрддрд┐ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░рддреА рд╣реИ - рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рд╣рдореЗрд╢рд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рд░рд╣реЗрдЧрд╛ред
рд╣рдордиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рдереА, рдФрд░ рдЕрдм рд╣рдордиреЗ рд╡рд╣рд╛рдВ рдПрдХ рд░рдгрдиреАрддрд┐ рдЬрд╛рдВрдЪ рдЬреЛрдбрд╝реА рд╣реИред
- рдпрджрд┐ SaveMe рд░рдгрдиреАрддрд┐ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред
- рдпрджрд┐ рд░рдгрдиреАрддрд┐ рдХрд┐рд▓рдореЗ рд╣реИ , рддреЛ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдорд╛рд░ рджреЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
override fun execute(act: Act, e: (Throwable) -> Unit) = when { map.contains(act.id) -> when (act.strategy) { KillMe -> { map.remove(act.id) startExecution(act, e) } SaveMe -> log("${act.id} - Act duplicate") } else -> startExecution(act, e) }
рдкрд░рд┐рдгрд╛рдо
рд╣рдо рдиреНрдпреВрдирддрдо рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рд╕рд╛рде рд╣реА, рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧреА рдЦреБрд╢ рд╣реИрдВ, рдФрд░ рд╣рдо рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
executor.apply { execute(Completable.timer(2, SECONDS) .toAct("Hello", KillMe)) execute(Completable.timer(2, SECONDS) .toAct("Hello", KillMe)) execute(Completable.timer(2, SECONDS) .toAct("Hello┬л, KillMe)) } Hello - Act Started Hello - Act Canceled Hello - Act Started Hello - Act Canceled Hello - Act Started Hello - Act Finished
рд╣рдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рд░рдгрдиреАрддрд┐ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рднреА рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ, рдФрд░ рдЕрдЧрд▓реЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ, рддреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛ 3: рдкрд░реНрдпрд╛рдкреНрдд рд░рдгрдиреАрддрд┐ рдирд╣реАрдВ
рдЪрд▓реЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд╣рдо рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ,
"рдкрд╕рдВрдж / рдирд╛рдкрд╕рдВрдж" ред рдПрдХ рдкреЛрд╕реНрдЯ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдкреВрд░реЗ рдпреВрдЖрдИ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдЦреБрд╢ рд╣реЛрдЧрд╛ред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдзреЛрдЦрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рд╡рд╣ рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реБрдЖ рд╣реИ - рдПрдХ рд╕реБрдВрджрд░ рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ - рд╣рдо рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдзреЛрдЦреЗ рд╕рдЪ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗред рдзреЛрдЦрд╛рдзрдбрд╝реА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдирд╛рдкрд╕рдВрдж рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд╕рдХреЗред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рд░ рдмрд╛рд░
рднрд┐рдиреНрди, рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рдкреНрд░рд╢реНрди рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ? рдЗрди рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ? рдЬрдЯрд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рди рдХрд░реЗрдВ? рдирдП рдШрдЯрдХреЛрдВ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рджреЗрдВ? рдХрд╛рд░реНрдп рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдФрд░ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред
рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣ рдФрд░ рд░рдгрдиреАрддрд┐
GroupStrategyHolder рдирд╛рдордХ рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ - рдПрдХ рдХреЗ рдмрдЬрд╛рдп рджреЛ рдХреНрд╖реЗрддреНрд░ред
interface GroupStrategyHolder { val groupStrategy: GroupStrategy val groupKey: String } sealed class GroupStrategy object Default : GroupStrategy() object KillGroup : GroupStrategy()
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдирдИ рдЗрдХрд╛рдИ - рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдореВрд╣ рдХреА рд░рдгрдиреАрддрд┐рдпрд╛рдВ рднреА рд╣реЛрдВрдЧреАред рд╣рдо рджреЛ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
рдбрд┐рдлрд╝реЙрд▓реНрдЯ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдгрдиреАрддрд┐ рдЬрдм рд╣рдо рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░
рдХрд┐рд▓рдЧреНрд░реБрдк - рд╕рдореВрд╣ рд╕реЗ рд╕рднреА рдореМрдЬреВрджрд╛ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред
interface Act : StrategyHolder, GroupStrategyHolder { val id: String } class CompletableAct( override val id: String, override val completable: Completable, override val strategy: Strategy = SaveMe, override val groupStrategy: GroupStrategy = Default override val groupKey: String = "" ) : Act
рд╣рдо рдЙрди рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА: рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЗрддреЗ рд╣реИрдВ, рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдХрдВрдкреЗрдЯрд┐рдмрд▓рдПрдХреНрдЯ рдФрд░ рд╕рд┐рдВрдЧрд▓рдПрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВ
рд╣рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рддреАрд╕рд░рд╛ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣ рдХреА рд░рдгрдиреАрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдпрджрд┐ рдпрд╣ рдХрд┐рд▓рдЧреНрд░реБрдк рд╣реИ, рддреЛ рд╣рдо рдкреВрд░реЗ рд╕рдореВрд╣ рдХреЛ рдорд╛рд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
MapDisposable -> GroupDisposable ... override fun execute(act: Act, e: (Throwable) -> Unit) { if (act.groupStrategy == KillGroup) groupDisposable.removeGroup(act.groupKey) return when { groupDisposable.contains(act.groupKey, act.id) -> when (act.strategy) { KillMe -> { stop(act.groupKey, act.id) startExecution(act, e) } SaveMe -> log("${act.id} - Act duplicate") } else -> startExecution(act, e) } }
рд╕рдорд╕реНрдпрд╛ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдкрд░реНрдпрд╛рдкреНрдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИ - рд╣рдо рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдм рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдкрд░рд┐рдгрд╛рдо
fun act(id: String)= Completable.timer(2, SECONDS).toAct( id = id, groupStrategy = KillGroup, groupKey = "Like-Dislike-PostId-1234" ) executor.apply { execute(act(тАЬLikeтАЭ)) execute(act(тАЬDislikeтАЭ)) execute(act(тАЬLikeтАЭ)) } Like - Act Started Like - Act Canceled Dislike - Act Started Dislike - Act Canceled Like - Act Started Like - Act Finished
рдпрджрд┐ рд╣рдореЗрдВ рдРрд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рджреЛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: groupStrategy рдФрд░ рд╕рдореВрд╣ IDред рд╕рдореВрд╣ рдЖрдИрдбреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдЬреИрд╕реЗ / рдирд╛рдкрд╕рдВрдж рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рд╕рдореВрд╣ рдХреЛ рдкрд╕рдВрдж-рдирд╛рдкрд╕рдВрдж-рдкреЛрд╕реНрдЯрдЖрдИрдб рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдЖрдИрдбреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдкрдбрд╝реЛрд╕реА рдкреЛрд╕реНрдЯ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрдХреАрди рд╣реЛрдЧрд╛ рдХрд┐ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдЧрд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рд╕рдорд╛рди-рдирд╛рдкрд╕рдВрдж рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬрдм рд╣рдо рдкрд╣рд▓реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реА - рдкрд┐рдЫрд▓реА рд╡рд╛рд▓реА рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рдХреА рддрд░рд╣ рдкрд┐рдЫрд▓реЗ рдирд╛рдкрд╕рдВрдж рдХреЛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдЕрдзрд┐рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдХреВрд▓ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВред
рдЖрд╕рд╛рди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдгрдп рд╣рдорд╛рд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░, рдореИрдВ рдЕрдХреНрд╕рд░ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реНрдпреВ рдореЙрдбрд▓ рдпрд╛ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╣реИрдХ, рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ / рдирд╛рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред рдЖрдорддреМрд░ рдкрд░ рд╡реНрдпреВ рдореЙрдбрд▓ рдореЗрдВ рдпрд╣ рд╕рднреА рддрд░реНрдХ: рдмрдЯрди рд▓реЙрдХрд┐рдВрдЧ, рд▓рд╛рдЗрдл рд╕рд╛рдЗрдХрд┐рд▓ рд╣реИрдВрдбрд▓рд░, рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдбред

рдЕрдм рдЬреЛ рдХреБрдЫ рднреА рд╣рдорд╛рд░рд╛ рдПрдХреНрдЬрд┐рдХреНрдпреВрдЯрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдкреНрд░реЗрдЬреЗрдВрдЯрд░ рдпрд╛ рд╡реНрдпреВ рдореЙрдбрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдерд╛ред рдпрджрд┐ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░рд┐рдкрдХреНрд╡ рд╣реИ, рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рддрд░реНрдХ рдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ рдпрд╛ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрд░реНрдХ рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдордиреЗ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯрд░ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рджреЗрдЦреЗрдВ рдореЙрдбрд▓ рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рддрд░реНрдХ рдЙрдирд╕реЗ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВред рдЕрдЧрд░ рдЖрдк рдПрдХ рдмрд╛рд░ рдкреНрд░реЗрдЬреЗрдВрдЯрд░ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЖрдП рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯрд░ рдФрд░ рдкреНрд░реЗрдЬреЗрдВрдЯрд░ рдЖрд╕рд╛рди рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╕рдВрддреБрд╖реНрдЯ рдерд╛ред

рдФрд░ рдХреНрдпрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ?
рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдФрд░ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИред рд╣рдо рдФрд░ рдХреНрдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рджрд┐рди рдмрдЧ рдФрд░ рдХрдИ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВ?
рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ
рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рднреА рд╣рдореЗрд╢рд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЪрд┐рдВрддрд╛ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреБрдЫ рднреА рдмрд╣ рди рдЬрд╛рдПред рдореИрдВ рдЖрд╡реЗрджрди рдкреБрдирдГ рдЖрд░рдВрдн рдЕрдиреБрд░реЛрдзреЛрдВ
рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЬрдВрдЬреАрд░реЛрдВ рдХреА рдкреБрдХрд╛рд░ред рдЖрд░рдПрдХреНрд╕ рдЬрдВрдЬреАрд░реЛрдВ рдХреЗ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдПрдХреНрд╕ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдз рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрд┐рдВрджреБ рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЫреЛрдЯреЗ рдФрд░ рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрд░реИрд╢ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╢рд┐рдХрд╛рдпрддреЛрдВ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд┐рдирд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ: рд╢рд╛рдпрдж рдХрд╛рд░рдг рдпреВрдЖрдИ рдореЗрдВ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВред рд╣рдо рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ
рдореАрдЯреНрд░рд┐рдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдЖрдЗрдП рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЬреАрд╡рди рдЪрдХреНрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
class ActExecutorImpl( lifecycle: Lifecycle ) : ActExecutor { inir { lifecycle.doOnDestroy { cancelAll() } } ...
рдпрд╣ рдПрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ -
Destroy
рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛
Activity
рд╕рд╛рде рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо
рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрдирдХрд░реНрддрд╛ рдХреЛ рдЬреАрд╡рдирдЪрдХреНрд░-рд╣реИрдВрдбрд▓рд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдЬрдм
onDestroy рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ ред рдпрд╣ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд╡реНрдпреВ рдореЙрдбрд▓реНрд╕ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред LifeData рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред
рдмрдЪрд╛рдирд╛ / рдмрд╣рд╛рд▓ рдХрд░рдирд╛
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реИрдкрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо
рдЕрдзрд┐рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдЕрдВрджрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрд╕ рдирд╛рдо рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ
рд╕реЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлреИрдХреНрдЯреНрд░реА рдореЗрдердб рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрд╕реА рд╕рдордп, рд╣рдореЗрдВ рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛рд░реНрдп рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рд╣рдо рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рд╣реБрдП рдереЗред рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╛ рдЕрдиреБрд░реЛрдз рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реИрдкрд░ рдХреЗ рдирд┐рдпрдорд┐рдд рдЖрд░рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдЬрдВрдЬреАрд░реЛрдВ рдХреЛ рдмреБрд▓рд╛рдУ
рд╣рдо
рдЕрдкрдиреЗ рдЕрдзрд┐рдирд┐рдпрдореЛрдВ рдХреЛ рднреА
рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд▓реНрдк
рдХреНрд╡реЗрд░реА рдЪреЗрди рдЪрд▓рд╛рдирд╛ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдЗрдХрд╛рдИ, рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЙрд╕ рд╕рдордп рдмрд┐рд▓реНрдХреБрд▓ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рдерд╛ред рдпрд╣ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЗрддрдирд╛ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдирдВрдЧреЗ RX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред
рдореИрдЯреНрд░рд┐рдХреНрд╕
рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ
рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдФрд╕рддрди рдХрд┐рддрдиреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╢реНрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ред рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реБрд╕реНрддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╢рд┐рдХрд╛рдпрддреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред , , .
, , ,
, - - 10% . , .
рдирд┐рд╖реНрдХрд░реНрд╖
тАФ , . ┬л┬╗ . , , , , .
, , . тАФ - , , тАФ . тАФ . , . .
.
. Kotlin, . ,
.
AppsConf 2018, AppsConf 2019 . 38 : , Android, UX, , - , , Kotlin.
, youtube- 22тАУ23 .