我有一個小程序,在那裏你可以點擊一個圖像,然後將其改變。但這個小應用程序有一個非常高的內存使用情況,我想不通爲什麼:(。或者只是正常的,我要實現對內存很多方法,節約?...爲什麼這麼高的內存使用率?
當我點擊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