10 рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╣рд░ Android рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

10 рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╣рд░ Android рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП


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


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


1. рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ


рд░реЗрдЯреНрд░реЛрдлрд╝рд┐рдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ REST API рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдХреА рдорджрдж рд╕реЗ рдирд┐рдХрд╛рдпреЛрдВ, рд╣реЗрдбрд░, рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдХрдИ рдЕрдиреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд░рд▓ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧреАред рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ рдЖрдкрдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


interface ApiService { @GET("movie/{id}") fun getMovieDetails(@Path("id") id: String) : Call<MovieDetails> } 

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


2. рдореЛрд╢реА


рдореЛрд╢реА JSON рдХреЛ рдЬрд╛рд╡рд╛ рдФрд░ рдХреЛрдЯрд▓рд┐рди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдХрдИ рд▓реЛрдЧ рдореЛрд╢реА рдХреЛ GSON 3.0 рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдИ рдкрд╣рд▓реБрдУрдВ рдореЗрдВ GSON рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ: рдпрд╣ рддреЗрдЬ рд╣реИ , рдпрд╣ рдХреЛрдЯрд▓рд┐рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИ, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдпреЛрдЧреНрдп рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рджреВрд╖рд┐рдд рдбреЗрдЯрд╛рдЗрдо рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЛрд╢реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, JSON рдХреЛ рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдФрд░ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред


 val moshi = Moshi.Builder().build() val jsonAdapter = moshi.adapter(Model::class.java) /* JSON to Model */ val model = jsonAdapter.fromJson(json) /* Model to JSON */ val json = jsonAdapter.toJson(model) 

рд╣рдореЗрдВ JSON API рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдореЛрд╢реА рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИред JSON API рдПрдХ API рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд┐рдП рдЧрдП рдХрдИ API рдЗрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдореЛрд╢реА JSON API рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ JSON API рд╕рд╛рд░реНрдердХ Java рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ рдЕрднреА рднреА рдореЛрд╢реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рдореЗрдВ рд╡реЗ рд╕рд┐рд░реНрдл рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


3. рдЪрдХ


рдЪрдХ Android рдХреЗ рд▓рд┐рдП рдПрдХ HTTP рдирд┐рд░реАрдХреНрд╖рдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдкрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ HTTP рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред HTTP рд▓реЙрдЧ рдХреЛ рдПрдХ рд╕реВрдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЪрдХ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХреНрдпреВрдП рд╡рд┐рднрд╛рдЧ рдХреЛ рдЦреБрд╢ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ: рдПрдВрдбреНрд░реЙрдЗрдб рдХреА рддрд░рдл рдпрд╛ рд╕рд░реНрд╡рд░ рдХреА рддрд░рдлред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдХрднреА-рдХрднреА рд▓реЙрдЧрдХреИрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рднреА рдЖрдкрдХрд╛ HTTP рдЗрддрд┐рд╣рд╛рд╕ рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдЧрд╛, рдЬрдмрдХрд┐ рд▓реЙрдЧрдХреИрдЯ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдордп-рд╕рдордп рдкрд░ рдЦреБрдж рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред


рдЪрдХ


4. рд╕рд░рдХрдирд╛


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


 GlideApp.with(context) .load(url) .centerCrop() .placeholder(R.drawable.ic_placeholder) .into(imageView) 

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


5. рддреАрди


рдереНрд░реАрдЯреЗрди рдПрдВрдбреНрд░реЙрдпрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯ рдФрд░ рдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдпрд╣ JSR-310 рдХрд╛ рдПрдХ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдорд╛рдирдХ java.time.* рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ java.time.* рдкреИрдХреЗрдЬред рд╣рдореЗрдВ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ Android рдХреИрд▓реЗрдВрдбрд░ API рдПрдХ рдмреБрд░реЗ рд╕рдкрдиреЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


 /* Current DateTime */ LocalDateTime.now() /* String to DateTime */ val localDateTimeString = "2011-12-03T10:15:30" val localDateTime = LocalDateTime.parse(localDateTimeString) 

рдереНрд░реАрдЯреЗрди рддрд░реАрдХреЛрдВ рдФрд░ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдм рддрдХ рдЬреЛрдбрд╛рдЗрдордЯрд╛рдЗрдо рд╕реЗ рдХрдорддрд░ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА API JodaTime API рд╕реЗ рднреА рдЫреЛрдЯреА рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JodaTime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ ThreeTen рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрднреА рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдереНрд░реАрдЯреЗрди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред


6. рдЗрдорд╛рд░рддреА рд▓рдХрдбрд╝реА


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


 /* Log error */ Timber.e("Error happened") /* Log warning with params */ Timber.w("Your variable value is %s", variable) /* Log exception */ try { ... } catch (e: Exception) { Timber.e(e) } 

7. рдХрдорд░рд╛


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


 @Dao interface MovieDao { @Query("SELECT details FROM movies WHERE id = :id") fun getMovieDetails(id: String): MovieDetails } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдорд░реЗ рдореЗрдВ LiveData Rx рдФрд░ LiveData рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рдУрдЖрд░рдПрдо рдкрд░ рдХрдХреНрд╖ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рд╣реИред рдХрдИ рдУрдЖрд░рдПрдо рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдкреАрдЖрдИ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рднреА рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдорд╛рдирдХ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрдорд░рд╛ рдмреЗрд╣рдж рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рдордп рдкрдврд╝рдиреЗ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдЦрд░реНрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


8. RxJava


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


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


 Single.zip( /* Execute first API call and retry twice if it fails */ apiService.getMovieActors(id).retry(2), /* Execute second API call and retry twice if it fails */ apiService.getMovieDetails(id).retry(2), /* Receive successful results and merge them into single model */ BiFunction<List<Actor>, MovieDetails, Movie> { actors, details -> Movie(details, actors) } ) /* Execute API calls on IO thread */ .subscribeOn(Schedulers.io()) /* Receive results on MainThread */ .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( onError = { /* Handle error */ }, onSuccess = { /* Handle full movie data */ } ) 

рд╕рд░рд▓ рдЬрд╛рд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЪрд▓реЛред


9. рдПрдВрдбреНрд░реЙрдпрдб рдХреЗрдЯреАрдПрдХреНрд╕


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


 /* Display View */ view.isVisible = true /* Apply padding to all sides */ view.setPadding(padding) /* Update padding on any side */ view.updatePadding(left = newPadding, right = newPadding) /* Quick Toast */ toast("Display test toast") /* New way to create bundle */ bundleOf { "key1" to item1 "key2" to item2 } /* Better way to use SharedPreferences */ sharedPreferences.edit { putString("key1", "value1") putString("key2", "value2") } 

рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗрдЯреАрдПрдХреНрд╕ рдХреЛ рдХрдИ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдХрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдЖрдИ рдореЗрдВ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ред Android KTX, Android API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА Kotlin рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдиреАрдВрд╡ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


10. рдЦрдВрдЬрд░


рд╢реАрд░реНрд╖ 10 рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╣рдорд╛рд░реА рд╕реВрдЪреА рдбреИрдЧрд░ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдврд╛рдВрдЪрд╛ рд╣реИред RxJava рдХреА рддрд░рд╣ рдбреИрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдореБрдЭреЗ рдЙрдирдХреЗ рдХреЙрдлреАрдореЗрдХрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рд╛), рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред


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


рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛ рд░рд╣реА рд╣реИред рдбреИрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИред


рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓, Google рдиреЗ рдПрдХ рдЕрд▓рдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдбреИрдЧрд░ рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝рд╛ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ рдХрдо рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред


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


рддреЛ рдпрд╣ рдпрд╣рд╛рдБ рд╣реИ: 2018 рдореЗрдВ рд╢реАрд░реНрд╖ 10 рдПрдВрдбреНрд░реЙрдЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╣рдорд╛рд░реА рд╕реВрдЪреАред рджрд╕ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдмрдирд╛ рджреЗрдВрдЧреЗ рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдЕрдкрдиреА рдХрдИ рдПрдВрдбреНрд░реЙрдЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рдХрд╕рд┐рдд рдХреАрдВред рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  • MjolnirRecyclerView - рд╢реАрд░реНрд╖ рд▓реЗрдЦ, рдкрд╛рдж рд▓реЗрдЦ, рд░рд┐рдХреНрдд рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдФрд░ RecyclerView рдХреЗ рд▓рд┐рдП рдбрд┐рдлреБрдЯрд┐рд▓реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ;
  • рдЧреЛрд▓реНрдбрдлрд┐рдВрдЧрд░ - рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ;
  • DBInspector - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ;
  • рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░рд╛рдЬрдХреБрдорд╛рд░ - рдЖрд╡реЗрджрди рдХреЗ рднреАрддрд░ рдЖрд╡реЗрджрди рдЕрджреНрдпрддрди рд╕рдВрднрд╛рд▓рддреА рд╣реИред

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


All Articles