Android рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рд╕реВрддреНрд░: AsyncTask рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрдирд╛

рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдХрд╣рд╛рдирд┐рдпрд╛рдВ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдФрд░ рдЗрд╕ рдмрд╛рд░ рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЧрд▓рддрдлрд╣рдореА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрд╢рд╛ рд╣рд╛рде рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ AsyncTask рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдЬреЛ рдПрдХ рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдкрд░ ImageView рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдбреЗрд╡рд▓рдкрд░.android.com/guide/topics/fundamentals/processes-and-threads.html

Android рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдПрдХ рдиреЛрдЯ

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

рдЖрдк рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЯреИрдЧ (рдЧрддрд┐рд╡рд┐рдзрд┐, рд╕реЗрд╡рд╛, рд░рд┐рд╕реАрд╡рд░ рдФрд░ рдкреНрд░рджрд╛рддрд╛) Android рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдХ рдЪрд▓реЗрдЧрд╛ред рдЖрдк рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдПрдВрдбреНрд░реЙрдЗрдб рдпрдерд╛рд╕рдВрднрд╡ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдкреБрд░рд╛рдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдорд╣рддреНрд╡ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджрдмрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдорд╣рддреНрд╡ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ 5 рд╕реНрддрд░ рд╣реИрдВ: (рд╕реВрдЪреА рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)

1. рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддрд╛ рд╣реИ (рдлреЛрд░рдЧреНрд░рд╛рдЙрдВрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛)
рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рддрдЪреАрдд рд╣реЛрддреА рд╣реИ; рд╕реЗрд╡рд╛ (рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг) рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддрд╛ рд╣реИ; startForeground () рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рд╕реЗрд╡рд╛; рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛ рдЕрдкрдиреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд░рддреА рд╣реИ; рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд╕реАрд╡рд░ рдЬреЛ рдСрдирд░рд┐рд╡рд┐рд╡ () рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

2. рдЕрджреГрд╢реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 1 рдХреА рд╢рд░реНрддреЗрдВ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рджреЗрдЦрддрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд╛рд▓реВ () рд╕рдХреНрд░рд┐рдпрдг рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

3. рд╕реЗрд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛
рд╕реЗрд╡рд╛ startService () рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ

4. рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

5. рдЦрд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШрдЯрдХреЛрдВ рдореЗрдВ onLowMemory () рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк onDestroy () рд╡рд┐рдзрд┐ рдкрд░ 100% рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдпрд╛ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдИ рд╕реЗрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ onStop (), рдЬреЛ (рд╡реЗ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ "рдореБрдЦреНрдп" рдзрд╛рдЧрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпреВрдЖрдИ рдереНрд░реЗрдб рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдЯреНрд░реАрдо рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдореЗрдВ рд╣реИ рдХрд┐ рд╡рд┐рдЧреЗрдЯреНрд╕ (рдмрдЯрди, рд╕реВрдЪрд┐рдпрд╛рдБ) рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШрдЯрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдШрдЯрдХ UI рдереНрд░реЗрдб рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред Android рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рдпрдо рд╣реИрдВ:

1) UI рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рди рдХрд░реЗрдВ
2) рдЧреИрд░-рдпреВрдЖрдИ рдзрд╛рдЧреЗ рд╕реЗ рдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ

рдЕрдм, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рдерд╛ - рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ ImageView рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╕реНрд╡реАрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ: рд╣рдо рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
public void onClick(View v) { new Thread(new Runnable() { public void run() { Bitmap b = loadImageFromNetwork("http://example.com/image.png"); mImageView.setImageBitmap(b); } }).start(); } 

рдпрд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЫрд╡рд┐ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 2 рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ред рдЖрдк рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАред
View.post (рдЪрд▓рд╛рдиреЗ рдпреЛрдЧреНрдп)
View.postDelayed (рдЪрд▓рд╛рдиреЗ рдпреЛрдЧреНрдп, рд▓рдВрдмрд╛)

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
 public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png"); mImageView.post(new Runnable() { public void run() { mImageView.setImageBitmap(bitmap); } }); } }).start(); } 

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

AsyncTask рдЖрдкрдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onPostExecute () рдореЗрдердб рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдФрд░ doInBackground () рдореЗрдердб рдореЗрдВ рд╕рднреА рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╡рд░реНрдХ рдХреЛ рдПрдиреНрдХреНрд▓реЛрдЬ рдХрд░реЗрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди () рд╡рд┐рдзрд┐ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ AsyncTask рдЙрджрд╛рд╣рд░рдг рд▓рд╛рддрд╛ рд╣реВрдВ, рдЬреЛ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдорд╛рдирдХ рд╕рдВрд╡рд╛рдж рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рд╡рд┐рдЪрд▓рди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк):
 @EActivity(R.layout.main) public class DownloadImageActivity extends Activity { ProgressDialog progress; @ViewById ImageView image; @ViewById Button runButt; String pictUrl = "http://www.bigfoto.com/sites/main/churfirsten_switzerland-xxx.JPG"; @BeforeCreate void getProgressDialog(){ progress = new ProgressDialog(this); progress.setMessage("Loading..."); } @Click(R.id.runButt) void runClick(){ new DownloadImageTask().execute(pictUrl); } class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... params) { publishProgress(new Void[]{}); //or null String url = ""; if( params.length > 0 ){ url = params[0]; } InputStream input = null; try { URL urlConn = new URL(url); input = urlConn.openStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return BitmapFactory.decodeStream(input); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); progress.show(); } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); progress.dismiss(); image.setImageBitmap(result); } } } 


рдФрд░ рдЕрдм рд╣рдо рд╕рдВрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдмрд╕реЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
 public class DownloadImageActivity extends Activity { ImageView image; Button runButt; final static String PICT_URL = "http://www.bigfoto.com/sites/main/churfirsten_switzerland-xxx.JPG"; final int PROGRESS_DLG_ID = 666; final static String DEBUG_TAG = "+++ImageDownloader+++"; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); loadViews(); } private void loadViews(){ runButt = (Button)findViewById(R.id.runButt); image =(ImageView)findViewById(R.id.image); } @Override protected Dialog onCreateDialog(int dialogId){ ProgressDialog progress = null; switch (dialogId) { case PROGRESS_DLG_ID: progress = new ProgressDialog(this); progress.setMessage("Loading..."); break; } return progress; } public void runButtonHandler(View button){ if(button.getId() == R.id.runButt) new DownloadImageTask().execute(PICT_URL); } class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... params) { publishProgress(new Void[]{}); String url = ""; if( params.length > 0 ){ url = params[0]; } InputStream input = null; try { URL urlConn = new URL(url); input = urlConn.openStream(); } catch (MalformedURLException e) { Log.d(DEBUG_TAG,"Oops, Something wrong with URL..."); e.printStackTrace(); } catch (IOException e) { Log.d(DEBUG_TAG,"Oops, Something wrong with inpur stream..."); e.printStackTrace(); } return BitmapFactory.decodeStream(input); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); showDialog(PROGRESS_DLG_ID); } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); dismissDialog(PROGRESS_DLG_ID); image.setImageBitmap(result); } } } 

рдХреЛрдб рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдореИрдВрдиреЗ рд╕рднреА рдПрдиреЛрдЯреЗрд╢рди рднреА рдирд┐рдХрд╛рд▓реЗ рддрд╛рдХрд┐ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛред

рдЕрдкрдиреЗ рдмрдЯрди рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛: Android: onClick = "runButtonHHler"

рдФрд░ рдореИрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛: рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ ( рдЯрд╛рдпрдЯреНрд╕ ) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реАрдПрдХреНрд╕реНрдпреВрдЯ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдкреИрд░рд╛рдореАрдЯрд░ AsyncTask рдореЗрдВ рдкрд╛рд╕ рд╣реБрдП:
1. рдкреИрд░рд╛рдореАрдЯрд░ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, URL)ред
2. рдкреНрд░рдЧрддрд┐ (рдХрд╛рд░реНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдЗрдпрд╛рдБ)ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
3. рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдЯрдореИрдк рдСрдмреНрдЬреЗрдХреНрдЯ)

рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо doInBackGround () рдореЗрдердб рдореЗрдВ рд╕рднреА рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╡рд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрдмреНрд▓рд┐рд╢рдкреНрд░реЛрдкрд░реЗрд╢рди () рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдСрди рдкреНрд░реЛрдЧреНрд░реЗрд╕рдЕрдкрдкрдбреЗрдЯ () рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЗрдореЗрдЬ рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░рд╛ ProgressDialog рд╕реНрдкрд┐рди рд╣реЛред рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдирдкреЛрд╕реНрдЯрдПрдХреНрд╕реНрдпреВрдЯ () рдкрджреНрдзрддрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк doInBackGround () рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдмрд┐рдЯрдореИрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рд╡рд╣реАрдВ рд╣рдо рдЗрд╕реЗ ImageView рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ:

1) doInBackGround () рдкрджреНрдзрддрд┐ рдХреЛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ UI рд╕реНрдЯреНрд░реАрдо рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред
2) onPostExecute () рдФрд░ onProgressUpdate () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ UI рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ UI рдШрдЯрдХреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рд╣рд╛рдВ, рдореИрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб-рдПрдиреЛрдЯреЗрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рдЪрд┐рдВрддрд┐рдд рди рд╣реЛрдВред

рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбрд▓ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕реВрдЪрдирд╛ + рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

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

UPD рд╕рдВрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рдХрд░ рд▓реЗрдЦ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In124484/


All Articles