当触摸拇指并启动功能时,如何避免40%的CPU使用率和70MB的RAM(以10MB开头)?
这是场景:
我有ListView
可以包含文字或图片。
用户可以拍照并将照片保存到sdcard0并通过路径加载到相对ImageView
。
我的表现存在一些问题。
保存图像或文本并将其放入列表视图的适配器: PS:我尝试使用ViewHolder来优化列表视图,但是我在使用Picasso加载图像时遇到了一些问题,所以我将其删除了!
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.evento_list_view_line, null);
ImageView img = (ImageView)convertView.findViewById(R.id.compiti_imageView);
TextView compito = (TextView)convertView.findViewById(R.id.compiti_text);
Compiti m = getItem(position);
if(m.getTestoCompito() != null){
compito.setText(m.getTestoCompito());
//Invisibile e non presente nel layout
img.setVisibility(View.GONE);
}else if(m.getPathFoto() != null){
//load img
Picasso.with(getContext())
.load(m.getPathFoto())
.resize(200, 200)
.centerCrop()
.into(img);
//Set the tag for retrieve the path of image from listview
img.setTag(m.getPathFoto());
}
return convertView;
}
如您所见,我使用setTag(ImgPath)从ImageView检索路径。
如果图像位于ImageView
:
// ListView Item Click Listener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ImageView image_to_zoom = (ImageView) view.findViewById(R.id.compiti_imageView);
if (image_to_zoom.getDrawable() != null) {
//Image IN
String path = image_to_zoom.getTag().toString();
zoomImageFromThumb(image_to_zoom, path);
} else {
//Imane nope
Toast.makeText(getApplicationContext(), "No photo here!" , Toast.LENGTH_LONG).show();
}
}
});
// Retrieve and cache the system's default "short" animation time.
mShortAnimationDuration = getResources().getInteger(
android.R.integer.config_shortAnimTime);
我从google.developer找到了方法zoomImageFromThumb(image_to_zoom, path);
,我做了一些更改,因为原始代码从R.resources获取图像,我需要从内存中获取图像(文件夹图片)。
我的改变:
private void zoomImageFromThumb(final View thumbView, String imagePath) {
// If there's an animation in progress, cancel it
// immediately and proceed with this one.
if (mCurrentAnimator != null) {
mCurrentAnimator.cancel();
}
// Load the high-resolution "zoomed-in" image.
final ImageView expandedImageView = (ImageView) findViewById(
R.id.expanded_image);
//expandedImageView.setImageResource(imageResId);
Picasso.with(this)
.load(imagePath)
.into(expandedImageView);
如果我在没有方法getTag()的情况下手动设置路径,则app会非常快地加载触摸的图像,但是使用方法getTag()来检索图像的路径,应用程序加载触摸图像的缩放非常慢。 一些建议或帮助?
还有另一种方法可以在ImageView中检索图像的路径吗?