我在java中为android设备编写了一个代码,合并了一些png图像并创建了一个位图并在Imageview中显示。它可以工作,但之后应用程序将太慢。我的代码有什么问题?我觉得这有点像内存泄漏!这样对吗?以及如何修复代码?
library(stringr)
res <- str_extract(df$V1, "(?<=\\/).*(?=\\/[^?]+[?])")
res[is.na(res)] <- 0
res
#[1] "cgi-bin" "0" "journal"
#[4] "0" "pede/lobortis/ligula/sit"
答案 0 :(得分:0)
对于多个高分辨率的png drawable,LayerDrawable可能非常慢,因为它在draw()函数中逐个绘制图层:
@Override
public void draw(Canvas canvas) {
final ChildDrawable[] array = mLayerState.mChildren;
final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
dr.draw(canvas);
}
}
}
最好将LayerDrawable的发射缓存到位图中,然后使用此位图。
Bitmap bmp = Bitmap.createBitmap(layeredDrawable.getIntrinsicWidth(),
layeredDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
layeredDrawable.setBounds(0, 0, layeredDrawable.getIntrinsicWidth(), layeredDrawable.getIntrinsicHeight());
layerDrawable.draw(new Canvas(bmp));
要检查的另一件事是从资源加载后的png drawables大小。如果位于错误的资源文件夹中,它们可能太大(例如,在加载密度= 3屏幕后,位于drawable /文件夹中的500x500 png将构成1500x1500)。