Cómo optimizar la velocidad de carga de la actividad
Este llamado caché es en realidad un objeto de mapa de bits. ARGB_8888;
Bitmap.Config.RGB_565;
El formato predeterminado es Bitmap.Config.ARGB_8888, pero la mayoría de los dispositivos integrados utilizan Bitmap. Para este último, no existe
Bitmap.Config.ARGB_8888;
RGB_565. RGB_565. Para este último, no hay valores alfa, por lo que no es necesario calcular la composición alfa al dibujar, lo que hace que dibujar sea más rápido. En segundo lugar, RGB_565 puede utilizar directamente la función de copia de memoria optimizada, que es más eficiente.
Por lo tanto, puedes usar el formato RGB_565 al crear el caché usando buildDrawingCache. Hay dos versiones de buildDrawingCache: buildDrawingCache(boolean) y buildDrawingCache().
No hay ningún parámetro para configurar el formato rgb, verifique primero el código fuente: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 7677 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 104 105 106 107 108 109 110 111 112 113 114 115 116 117 18 publicvoid buildDrawingCache(boolean autoScale){if((mPrivateFlags amp;DRAWING_CACHE_VALID) ==0|(autoScale ?(mDrawingCache
==null|| mDrawingCache.get()==null): (mUnscaledDrawingCache ==null|| mUnscaledDrawingCache.get()==null))) {if(( mPrivateFlags amp; DRAWING_CACHE_VALID)==0||(autoScale ? ViewDebug.TRACE_HIERARCHY){ ViewDebug.trace(this, ViewDebug.TRACE_HIERARCHY.HierarchyTraceType)HierarchyTraceType.BUILD_CACHE } if (Config.DEBUG amp; ViewDebug.ProfileDrawing); ) {EventLog .writeEvent(60002, hashCode()); int width = mRight - mLeft; int height = mBottom - mTop; adjuntoInfo final = mAttachInfo final booleano requerido = adjuntarInfo! =null&attachInfo.mScalingRequired;if(autoScale&scalingRequired){ ancho =(int)((ancho * adjuntoInfo.mApplicationScale) 0.5f alto = (int)((alto * adjuntoInfo.mApplicationScale) 0.5 f); } finalint dibujoCacheBackgroundColor = mDrawingCacheBackgroundColor; finalboolean opaque = dibujoCacheBackgroundColor;
rawingCacheBackgroundColor finalboolean opaque = dibujoCacheBackgroundColor ! =0||(mBGDrawable !=nullamp;amp;mBGDrawable.getOpacity()== PixelFormat.OPAQUE if(width // Tamaño de mapa de bits proyectado en bytes ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize(); ; ) if(bitmap
=== null||bitmap.getWidth()! = ancho ||bitmap.getHeight()!= alto){ Bitmap.Config calidad; (mViewFlags amp; DRAWING_CACHE_QUALITY_MASK){case DRAWING_CACHE_QUALITY_AUTO: calidad ARGB_8888; break case DRAWING_CACHE_QUALITY_LOW: calidad = Bitmap.Config.ARGB_44444 calidad = Bitmap.ARGB_4444 case DRAWING_CACHE_QUALITY_HIGH: calidad = Bitmap .Configuración.ARGB_8888;romper;}} else{ calidad = Bitmap.Config.RGB_565 } // Intenta limpiar la memoria if (bitmap! = null) bitmap.recycle(); try{ bitmap = Bitmap.createBitmap(ancho, alto, calidad). (getResources().getDisplayMetrics ().densityDpi); if (autoScale){ mDrawingCache =new SoftReference(bitmap);}else{ mUnscaledDrawingCache =new SoftReference(bitmap);}}catch(OutOfMemoryError e){//Si no lo hay suficiente memoria para crear el caché de mapa de bits, ignore este problema, porque el caché de mapa de bits no es necesario al dibujar la jerarquía de vistas. =0;}Lienzo
canvas; if(attachInfo! =null){ canvas = adjuntoInfo.mCanvas; if(canvas
==null){ canvas =newCanvas();} canvas.setBitmap(bitmap); Canvas, en caso de que uno de nuestros descendientes // también esté usando el caché de dibujo. Si no hace esto, los niños ///robarán el lienzo al agregarle su propio mapa de bits //, lo cual no es una buena idea. adjuntoInfo.mCanvas=null;}else{// Espero que esta situación nunca suceda o suceda raramentecanvas =newCanvas(bitmap);}if(clear){ bitmap.mCanvas=null;}else{//Esta situación debería nunca o rara vez suceder. computarScroll(); finalint restaurarCount = canvas.save(); if (autoScale amp; scalingRequired) {finalfloat scale = adjuntoInfo.mApplicationScroll; canvas.scale(escala, escala); canvas.translate(escala, escala); eraseColor(drawingCacheBackgroundColor); } ComputeScroll(); escala finalint); mScrollX, -mScrollX, -mScrollX, -mScrollXtranslate(-mScrollX, -mScrollY); mPrivateFlags |= DRAWN; // Ruta rápida sin diseño de fondo if((mPrivateFlags & SKIP _DRAW)== SKIP_DRAW){if(ViewDebug .restoreToCount(restoreCount) ); if(attachInfo ! =null){// Restaurar el lienzo en caché para nuestros compatriotas addInfo.mCanvas= canvas; } mPrivateFlags |= DRAWING_CACHE_VALID; }}
No obstante, se detuvo, pero la placa base también está defectuosa. Sospechado C3: Problema de memoria D3, D4: Estos son problemas de memoria, pero la ranura de memoria de la placa base también es posible
.