¿Canvas.getClipBounds asigna un objeto Rect?
En mi vista personalizada, estoy buscando usar Canvas.getClipBounds () para optimizar mi método onDraw (para que sólo dibuje lo que es absolutamente necesario cada vez que se llame).
Sin embargo, todavía quiero evitar absolutamente cualquier creación de objetos …
- ¿Algún consejo sobre cómo acelerar esto en Android?
- Detección de presencia de FPU en Android
- OpenCV: Optimización del cálculo del flujo óptico
- Cómo optimizar las aplicaciones de Android para varios núcleos
- Demasiadas actividades en Android?
Mi pregunta, por lo tanto es: ¿ getClipBounds()
asigna un nuevo Rect cada vez que se llama? ¿O es simplemente el reciclaje de un solo Rect?
Y si está asignando un nuevo objeto, ¿puedo guardar este gasto utilizando getClipBounds(Rect bounds)
, que parece utilizar el pasado Rect en lugar de su propio?
(antes de gritar la optimización prematura, considere que cuando se coloca en un ScrollView, onDraw se puede llamar muchas veces cada segundo)
- Proguard con OrmLite en Android
- Optimización de SQLite para aplicaciones de Android
- ¿View.setVisibility (View.VISIBLE) obliga a la vista a volver a dibujar incluso si ya es visible?
- Optimización: Acceso a campos y métodos
- ¿Cómo podemos optimizar (cpu & ram) esta animación de salpicadura personalizada de android?
- Android ProGuard: Optimizaciones más agresivas
- ¿Cómo hacer que RecyclerView recicle dentro de NestedScrollView?
- Precisión del sueño del hilo
He mirado en el código fuente para la lona como de Android 4.0.1, y es como sigue:
/** * Retrieve the clip bounds, returning true if they are non-empty. * * @param bounds Return the clip bounds here. If it is null, ignore it but * still return true if the current clip is non-empty. * @return true if the current clip is non-empty. */ public boolean getClipBounds(Rect bounds) { return native_getClipBounds(mNativeCanvas, bounds); } /** * Retrieve the clip bounds. * * @return the clip bounds, or [0, 0, 0, 0] if the clip is empty. */ public final Rect getClipBounds() { Rect r = new Rect(); getClipBounds(r); return r; }
Así que, respondiendo a tu pregunta, getClipBounds (Rect limits) te ahorrará de una creación de objeto, pero getClipBounds () creará un nuevo objeto Rect () cada vez que se llame.
la declaración del método real para "getClipBounds ()" es esta
- public boolean getClipBounds (Rect limits) para que no cree un nuevo Rect cada vez que llame. Utilizará el objeto Rect que pasará como argumento a esta función. sugiero echar un vistazo a esta descripción de enlace aquí
- Cómo configurar el fondo de un TextView dinámicamente desde un archivo Xml
- Android Honeycomb: Fragmento no puede iniciar AsyncTask?