{"id":263003,"date":"2015-08-06T10:10:02","date_gmt":"2015-08-06T06:10:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=263003"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=263003","title":{"rendered":"Best practices \u043e\u0442 Google \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439"},"content":{"rendered":"<p>             \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 best practices \u043e\u0442 Google. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u0440\u0430\u0437\u0443 \u043c\u043e\u0433 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u0444\u0438\u0447\u0430 \u0434\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c, \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0441\u044c. \u041a\u043e\u043d\u0441\u043f\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b + \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b \u043e\u0442 \u0441\u0435\u0431\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0432\u0438\u0434\u0435\u043e \u0432 <a href=\"https:\/\/www.youtube.com\/channel\/UCVHFbqXqoYvEWM1Ddxl0QDg\">www.youtube.com\/channel\/UCVHFbqXqoYvEWM1Ddxl0QDg<\/a><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 best practice.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4><b>Best practices. UI<\/b><\/h4>\n<p>  1. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 hardware accelaration. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c ui, \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u0435\u0434\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043e\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438)<\/p>\n<p>  2. \u0414\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 View \u0438\u043b\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 (\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0435\u0435), \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c hardware accelaration. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre> View.setLayerType(View.LAYER_TYPE_HARDWARE, null); ObjectAnimator animator = ObjectAnimator.ofFloat(view, &quot;rotationY&quot;, 180); animator.addListener(new AnimatorListenerAdapter() {     @Override     public void onAnimationEnd(Animator animation) {         view.setLayerType(View.LAYER_TYPE_NONE, null);     } }); animator.start(); <\/pre>\n<p>  3. \u0412 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 view, \u0435\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 hasOverlappingRendering \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c false, \u0442\u043e view \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0444\u0443 \u043f\u0440\u043e\u0447\u0435\u0435, \u0437\u0430\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u0430 \u0434\u0432\u0430 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0430: <a href=\"https:\/\/www.youtube.com\/watch?v=wIy8g8yNhNk&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=9\">www.youtube.com\/watch?v=wIy8g8yNhNk&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=9<\/a><br \/>  \u041f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u2014 <a href=\"http:\/\/developer.android.com\/guide\/topics\/graphics\/hardware-accel.html\">developer.android.com\/guide\/topics\/graphics\/hardware-accel.html<\/a> \u2014 \u0435\u0449\u0435 \u0441\u043e\u0432\u0435\u0442\u044b \u043f\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 UI<\/p>\n<p>  4. \u0412 onDraw \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b (\u0442\u0438\u043f\u0430 Paint \u0438 \u0442.\u0434.). \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u2014 \u044d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 + \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 + \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 gc.<br \/>  \u0421\u0441\u044b\u043b\u043a\u0430: <a href=\"https:\/\/www.youtube.com\/watch?v=HAK5acHQ53E&#038;index=10&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=HAK5acHQ53E&#038;index=10&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><\/p>\n<p>  5. Tools: Strict mode. \u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0443\u043b\u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0443\u0437\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 UI (\u0447\u0442\u043e-\u0442\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442, \u0433\u0434\u0435-\u0442\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f UI \u2014 ThreadPolicy). \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c memoty leaks (VMPolicy). \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u2014 <a href=\"http:\/\/developer.android.com\/reference\/android\/os\/StrictMode.html\">developer.android.com\/reference\/android\/os\/StrictMode.html<\/a><\/p>\n<p>  6. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 custom view.<br \/>  View.invalidate() \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u042d\u0442\u043e \u0437\u043b\u043e. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0432\u0435\u0441\u044c view, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 Rect (\u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e).<\/p>\n<p>  \u041d\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0435. \u0427\u0442\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u0442\u043e \u043d\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u0411\u0430\u043d\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0447\u0430\u0441\u0442\u043e \u044d\u0442\u0438\u043c \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0433\u0430\u044e\u0442. Canvas.clipRect() \u0432 \u043f\u043e\u043c\u043e\u0449\u044c. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0441\u043b\u043e\u0439 \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u2014 Canvas.quickReject(&#8230;)<\/p>\n<p>  \u041d\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432 \u0443\u0433\u043e\u0434\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 CPU \u0438 GPU.<\/p>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0430:https:\/\/www.youtube.com\/watch?v=zK2i7ivzK7M&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=12<\/p>\n<p>  7. Bitmap. \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0436\u0430\u0442\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e BitmapFactory.Options<br \/>  <a href=\"http:\/\/developer.android.com\/training\/displaying-bitmaps\/load-bitmap.html\">developer.android.com\/training\/displaying-bitmaps\/load-bitmap.html<\/a><\/p>\n<p>  8. Bitmap. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 Bitmap \u0438\u0437 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 (jpeg, png) \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442 ARGB_8888 (32 \u0431\u0438\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c). \u0415\u0441\u043b\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0430\u043c\u044f\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b (RGB_565 \u2014 16 \u0431\u0438\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435). \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 BitmapOptions. \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0430: <a href=\"https:\/\/www.youtube.com\/watch?v=1WqcEHXRWpM&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=14\">www.youtube.com\/watch?v=1WqcEHXRWpM&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=14<\/a><\/p>\n<p>  9. <a href=\"https:\/\/www.youtube.com\/watch?v=2TUvmlGoDrw&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=15\">www.youtube.com\/watch?v=2TUvmlGoDrw&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=15<\/a> \u2014 \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<br \/>  \u043d\u043e\u0432\u044b\u0439 \u0433\u0443\u0433\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e \u0436\u0435, \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0435\u043d\u044c\u0448\u0435) \u2014 <a href=\"https:\/\/developers.google.com\/speed\/webp\/?csw=1\">developers.google.com\/speed\/webp\/?csw=1<\/a><\/p>\n<p>  10. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 BitmapOptions \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=HY9aaXHx8yA&#038;index=16&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=HY9aaXHx8yA&#038;index=16&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><br \/>  <a href=\"http:\/\/developer.android.com\/training\/displaying-bitmaps\/load-bitmap.html#load-bitmap\">developer.android.com\/training\/displaying-bitmaps\/load-bitmap.html#load-bitmap<\/a><\/p>\n<p>  11. Overdraw. \u0417\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 GPU \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0445\u043e\u043b\u043e\u0441\u0442\u0443\u044e (\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0443\u0442\u044b\u0442\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432). \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f overdraw, \u043d\u0443\u0436\u043d\u043e \u0432 DeveloperOptions \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c Show GPU Overdraw flag. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0442\u0443\u043b\u0437\u0430 ViewHierarchy.<\/p>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0430: <a href=\"https:\/\/www.youtube.com\/watch?v=T52v50r-JfE&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=22\">www.youtube.com\/watch?v=T52v50r-JfE&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=22<\/a><\/p>\n<p>  12. TraceView \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. \u0412\u0441\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432 16 \u043c\u0441 (60 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443).<\/p>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0430: <a href=\"https:\/\/www.youtube.com\/watch?v=HXQhu6qfTVU&#038;index=21&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=HXQhu6qfTVU&#038;index=21&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><\/p>\n<p>  13. VSYNC. \u0427\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435. <br \/>  Refresh rate (60 hz) \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430. Frame rate \u2014 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f GPU.<\/p>\n<p>  \u041e\u0431\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u0430\u044f \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f. \u0421 GPU \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0434\u0443\u0442 \u0432 back buffer, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432 frame buffer, \u0430 \u043e\u0442\u0442\u0443\u0434\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. \u041c\u0435\u0436\u0434\u0443 back buffer \u0438 frame buffer \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f VSYNC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 back buffer \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b\u0438 \u0432 frame buffer \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430. \u042d\u0442\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>  \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b GPU (frame rate) \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u044b\u0448\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430 (refresh rate) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b ui \u0431\u044b\u043b \u043f\u043b\u0430\u0432\u043d\u044b\u043c.<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=1iaHxmfZGGc&#038;index=23&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=1iaHxmfZGGc&#038;index=23&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><\/p>\n<p>  14. Tool \u2014 Profile GPU Rendering<br \/>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432 DeveloperOptions. \u041d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0433\u0440\u0430\u0444 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 notification bar. \u0421\u0430\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u043d\u0430 \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0443 frame. \u0413\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0437\u0435\u043b\u0435\u043d\u0443\u044e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u2014 16ms (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430).<\/p>\n<p>  \u0421\u043e\u0441\u0442\u0430\u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0432\u0438\u0434\u0435\u043e \u043d\u0438\u0436\u0435. \u0412\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e:<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=VzYkVL1n4M8&#038;index=24&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=VzYkVL1n4M8&#038;index=24&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><\/p>\n<p>  15. \u0420\u0430\u0431\u043e\u0442\u0430 CPU \u0438 GPU \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"https:\/\/www.youtube.com\/watch?v=zVK6TKSx1lU&#038;feature=iv&#038;src_vid=VzYkVL1n4M8&#038;annotation_id=annotation_3064896115\">www.youtube.com\/watch?v=zVK6TKSx1lU&#038;feature=iv&#038;src_vid=VzYkVL1n4M8&#038;annotation_id=annotation_3064896115<\/a><br \/>  \u041a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u0438\u0433\u0440)<\/p>\n<p>  16. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 60 fps \u2014 <a href=\"https:\/\/www.youtube.com\/watch?v=CaMTIgxCSqU&#038;index=25&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=CaMTIgxCSqU&#038;index=25&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><\/p>\n<p>  17. Android UI and the GPU<br \/>  GPU \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432, \u0442\u0435\u043a\u0441\u0442\u0443\u0440. CPU \u043e\u0442\u0434\u0430\u0435\u0442 GPU \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OpenGL \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 GPU (\u043d\u0443\u0436\u043d\u043e \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c?). \u041f\u043b\u044e\u0441 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 GPU: \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0438 \u0442.\u0434.:<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=WH9AFhgwmDw&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=26\">www.youtube.com\/watch?v=WH9AFhgwmDw&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=26<\/a><\/p>\n<p>  18. Show GPU view updates in DevOps \u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b invalidate()<\/p>\n<h4><b>Best practices. \u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/b><\/h4>\n<p>  1. \u041f\u043e default \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440. \u041d\u043e \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0434\u043b\u044f ArrayList \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u2014 \u044d\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0446\u0438\u043a\u043b for. \u0415\u0441\u043b\u0438 \u0438\u043c\u0435\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 ArrayList, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0442\u044c. <br \/>  \u0421\u0441\u044b\u043b\u043a\u0438: <a href=\"http:\/\/developer.android.com\/training\/articles\/perf-tips.html#Loops\">developer.android.com\/training\/articles\/perf-tips.html#Loops<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=MZOf3pOAM6A&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=6\">www.youtube.com\/watch?v=MZOf3pOAM6A&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=6<\/a><\/p>\n<h4><b>Best practices. \u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u043d\u0435\u0440\u0433\u043e\u0441\u0431\u0435\u0440\u0435\u0433\u0430\u044e\u0449\u0438\u0435<\/b><\/h4>\n<p>  1. JobScheduler + <a href=\"https:\/\/github.com\/evant\/JobSchedulerCompat\">github.com\/evant\/JobSchedulerCompat<\/a> (\u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 &lt; 21). \u0421\u0440\u0435\u0434\u0441\u0442\u0432\u043e, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u044c\u044e), \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0449\u0435\u0435 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u044b\u043c\u0438 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u0441\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0438 (\u0440\u0430\u0434\u0438\u043e \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u0435\u0442 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0438 \u0432\u044b\u0436\u0438\u0434\u0430\u044e\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043c\u0430\u043b\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438). \u0414\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u043c\u044b \u0437\u0430\u0434\u0430\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0433\u0434\u0430, \u0441 \u043a\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u0438 \u043a\u0430\u043a\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0438 \u0442.\u0434. \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  2. SyncAdapter. \u0421\u0442\u0430\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 + \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 ContentProvider.<\/p>\n<p>  3. GCM. \u041a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0430 JobScheduler \u2014 <a href=\"https:\/\/developers.google.com\/cloud-messaging\/network-manager\">developers.google.com\/cloud-messaging\/network-manager<\/a>. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0435 \u043f\u0443\u0442\u0435\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0442 GSM \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443. \u041f\u043b\u044e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f GSM \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u0441\u043d\u0430 (M version)<\/p>\n<p>  4. Firebase Offline. \u041e\u0444\u0444\u043b\u0430\u0439\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<p>  5. AlarmManager. \u0417\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\/\u043f\u043e\u0432\u0442\u043e\u0440\u0430: inexact (\u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0440\u0440\u0435\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f), exact (\u0442\u043e\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)<\/p>\n<h4><b>Best practices. Battery<\/b><\/h4>\n<p>  1. \u0414\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<br \/>   \u2014 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<br \/>   \u2014 battery-historian (https:\/\/github.com\/google\/battery-historian)<\/p>\n<p>  \u0414\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0441 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u2014 JobScheduler<br \/>  \u041a\u0443\u0434\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u044f \u2014 <a href=\"http:\/\/research.microsoft.com\/en-us\/people\/mzh\/eurosys-2012.pdf\">research.microsoft.com\/en-us\/people\/mzh\/eurosys-2012.pdf<\/a> \u0425\u043e\u0440\u043e\u0448\u0438\u0439 research:<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=9i1_PnPpd3g&#038;index=29&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=9i1_PnPpd3g&#038;index=29&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a><\/p>\n<h4><b>Best practices. \u041f\u0430\u043c\u044f\u0442\u044c<\/b><\/h4>\n<p>  1. Object pools ( <a href=\"https:\/\/www.youtube.com\/watch?v=bSOREVMEFnM&#038;index=5&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE\">www.youtube.com\/watch?v=bSOREVMEFnM&#038;index=5&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE<\/a> ). \u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043d\u0430\u0434 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0442\u0438\u043f\u0430 Bitmap \u0438 \u043f\u0440\u043e\u0447\u0435\u0435). \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c GC \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <br \/>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f: LRUCache, Pools (https:\/\/developer.android.com\/reference\/android\/support\/v4\/util\/Pools.html), FlatBuffers (https:\/\/google.github.io\/flatbuffers\/ )<\/p>\n<p>  2. \u0414\u0443\u043c\u0430\u044e, \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e LRUCache \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c<\/p>\n<h4><b>Best practices. GC<\/b><\/h4>\n<p>  1. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 Dalvik and ART \u2014 <a href=\"http:\/\/source.android.com\/devices\/tech\/dalvik\/\">source.android.com\/devices\/tech\/dalvik<\/a><br \/>  \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440, \u0443 ART \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 GC \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b GC:<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=pzfzz50W5Uo&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=34\">www.youtube.com\/watch?v=pzfzz50W5Uo&#038;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&#038;index=34<\/a><\/p>\n<h4><b>Google play services 7.5<\/b><\/h4>\n<p>  1. Cloud messaging. \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u043c\u0430\u043c\u0438, NetworkManager, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 JobScheduler<br \/>  <a href=\"https:\/\/developers.google.com\/cloud-messaging\/\">developers.google.com\/cloud-messaging<\/a><\/p>\n<p>  2. App invites. \u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430<br \/>  <a href=\"https:\/\/developers.google.com\/app-invites\/\">developers.google.com\/app-invites<\/a><\/p>\n<p>  3. Smart lock for passwords. \u0415\u0441\u043b\u0438 \u044e\u0437\u0435\u0440 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u043c \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u0435, \u0438, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u043d \u0437\u0430\u0445\u043e\u0434\u0438\u043b \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u043f\u0430\u0440\u043e\u043b\u044c, \u0442\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0430\u0443\u0442\u0435\u043d\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438: <a href=\"https:\/\/developers.google.com\/identity\/smartlock-passwords\/android\/\">developers.google.com\/identity\/smartlock-passwords\/android<\/a><\/p>\n<p>  \u041f\u0440\u043e \u044d\u0442\u0438 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0434\u0435\u0441\u044c \u2014 <a href=\"https:\/\/developers.google.com\/app-invites\/\">developers.google.com\/app-invites<\/a><\/p>\n<h4><b>Voice interaction<\/b><\/h4>\n<p>  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041f\u043e \u0445\u043e\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 M \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>  <a href=\"http:\/\/io2015codelabs.appspot.com\/codelabs\/voice-interaction#1\">io2015codelabs.appspot.com\/codelabs\/voice-interaction#1<\/a><br \/>  <a href=\"https:\/\/developers.google.com\/voice-actions\/\">developers.google.com\/voice-actions<\/a><\/p>\n<h4><b>\u041d\u043e\u0432\u043e\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435<\/b><\/h4>\n<p>  1. Fingerprint API (\u043f\u043e \u043f\u0430\u043b\u044c\u0446\u0443) \u0438 Confirm credential(\u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438)<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=VOn7VrTRlA4&#038;index=11&#038;list=PLOU2XLYxmsIJDPXCTt5TLDu67271PruEk\">www.youtube.com\/watch?v=VOn7VrTRlA4&#038;index=11&#038;list=PLOU2XLYxmsIJDPXCTt5TLDu67271PruEk<\/a><br \/>  2. \u0412 M version \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0442.\u0434.<br \/>  3. Data binding \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c (\u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0434\u0430\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0432 xml)<br \/>  4. RecyclerView ItemTouchHelper \u2014 Swipe-to-dismiss, Drag&#038;Drop<br \/>  5. \u041f\u0440\u0438 setAlpha hardware \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<br \/>  6. External storage \u2014 no hard code!<\/p>\n<h4><b>Android studio<\/b><\/h4>\n<p>  1. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 SVG \u0444\u043e\u0440\u043c\u0430\u0442\u0430<br \/>  2. \u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Jack<br \/>  3. PNG Cruncher?<br \/>  4. Coming: aapt<br \/>  5. Studio 1.3 + Gradle 2.4 = \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u0431\u043e\u0440\u043a\u0438<br \/>  6. Data binding \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441\u0435\u0439\u0447\u0430\u0441<br \/>  7. Coming soon: Cloud test Lab, Google play testing<br \/>  8. NDK support<br \/>  9. \u041d\u043e\u0432\u044b\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 (WorkThread \u0438 \u0442.\u0434.)<br \/>  10. Android Typed Integer \u2014 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0444\u043b\u0430\u0433 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442<br \/>  11. Capture view: Heap snapshot, Allocation tracking \u0438 \u0442.\u0434. \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435<br \/>  12. \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0433\u0443\u0433\u043b\u043e\u0432\u0441\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 (\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u043e\u0431\u043b\u0430\u043a\u043e \u0438 \u0442.\u0434.)<br \/>  13. Theme editor<br \/>  <a href=\"https:\/\/www.youtube.com\/watch?v=f7ihSQ44WO0\">www.youtube.com\/watch?v=f7ihSQ44WO0<\/a><\/p>\n<h4><b>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/b><\/h4>\n<p>  1. Libraries for developers. \u041c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 UI \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/p>\n<h4><b>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/b><\/h4>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0442\u0430\u0442\u044c\u044f \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430! \u042d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0430\u043c\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043c\u043e\u0446\u0438\u0439 \u0438 \u0437\u043d\u0430\u043d\u0438\u0439, \u0436\u0434\u0443 \u0438\u043d\u0432\u0430\u0439\u0442\u0430. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u043b\u0438\u0431\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0436\u0434\u0443 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u043e\u0432.             <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/264255\/\"> http:\/\/habrahabr.ru\/post\/264255\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>             \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 best practices \u043e\u0442 Google. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u0440\u0430\u0437\u0443 \u043c\u043e\u0433 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u0444\u0438\u0447\u0430 \u0434\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c, \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0441\u044c. \u041a\u043e\u043d\u0441\u043f\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b + \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b \u043e\u0442 \u0441\u0435\u0431\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0432\u0438\u0434\u0435\u043e \u0432 <a href=\"https:\/\/www.youtube.com\/channel\/UCVHFbqXqoYvEWM1Ddxl0QDg\">www.youtube.com\/channel\/UCVHFbqXqoYvEWM1Ddxl0QDg<\/a><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 best practice.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-263003","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/263003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=263003"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/263003\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=263003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=263003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=263003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}