我有一个小程序,在那里你可以点击一个图像,然后将其改变。但这个小应用程序有一个非常高的内存使用情况,我想不通为什么:(。或者只是正常的,我要实现对内存很多方法,节约?...为什么这么高的内存使用率?
当我点击12次我手机上的内存使用量超过120兆字节 的图像都是围绕200KB
活动:。
public class Activity_easy extends Activity {
GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.easy_layout);
Button btn_back = (Button) findViewById(R.id.btn_back);
btn_back.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(),
MainActivity.class));
finish();
}
});
gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this));
final ImageAdapter ImageAdapter = new ImageAdapter(this);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Toast.makeText(gridView.getContext(), "Position: " + position, Toast.LENGTH_SHORT).show();
ImageAdapter.switchImage(position, view);
}
});
}
}
ImageAdapter:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private Integer[] pictures;
public ImageAdapter(Context c) {
mContext = c;
List<Integer> pictureList = new ArrayList<Integer>();
for(int i=0; i<6; i++) {
pictureList.add(i);
pictureList.add(i);
}
Collections.shuffle(pictureList);
pictures = (Integer[]) pictureList.toArray(new Integer[0]);
}
public int getCount() {
return pictures.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public ImageView getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
int size = mContext.getResources().getDimensionPixelSize(R.dimen.gridview);
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new LinearLayout.LayoutParams(size, size));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(R.drawable.card_back);
return imageView;
}
public void switchImage(int position, View view){
ImageView img = (ImageView) view;
int piece = pictures[position];
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDither = false;
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inSampleSize = 3;
Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(),mThumbIds[piece],options);
img.setImageBitmap(icon);
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.pic_1,
R.drawable.pic_2,
R.drawable.pic_3,
R.drawable.pic_4,
R.drawable.pic_5,
R.drawable.pic_6,
};
}
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<GridView
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="3"
android:stretchMode="columnWidth"
android:padding="5dp"
android:verticalSpacing="5dp"
android:horizontalSpacing="10dp"
android:gravity="center_vertical"
android:layout_marginBottom="100dp"/>
<Button
android:id="@+id/btn_back"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:text="@string/back_button" />
</RelativeLayout>
这可能是因为您加载所有的12个图像到内存中,并没有处置它们赶走正确 –
要创建2个图像适配器 – Eoin
此行是极不寻常的:'最后ImageAdapter ImageAdapter =新的ImageAdapter(this);' – MaxZoom