照片用照片用尽 - 更新

  • 本文关键字:照片 更新 android
  • 更新时间 :
  • 英文 :


我是Android的新手,并制作图片应用程序,但是我的内存不足。

主要活动是一个按钮的网格,这些按钮启动了新的活动,这些活动具有View Pager Photo Slider,显示了5sh照片。它目前是可行的,但是返回主屏幕并选择了一个新按钮(启动新的照片活动(后,它变得比崩溃慢。

观看监视器后,每次活动开始时都会分配内存,但是当按下后退按钮时,内存不会被交易。

我知道人们建议使用Glide库,但我正在为每个活动运行5个小型照片,如果不再需要活动时可以进行内存,那么我的当前设置应该可以工作。

我知道正在做的方式不是最好的方法,但我只是想快速地工作,然后我可以回去优化。

内存泄漏或我的错误在哪里?

建议?

预先感谢。

public class MainActivity extends AppCompatActivity {
static int picSet = 1; //the set of pictures i want
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
public void startActiv()
{
    startActivity(new Intent(MainActivity.this, PagerSetUp.class));
}
//Button/Image
public void firstMet(View view) {
    picSet = 1;
    startActiv();
}
//Button/Image
public void wedding (View view) {
    picSet = 2;
    startActiv();
}
//Button/Image
public void vacation(View view) {
    picSet = 3;
    startActiv();
}
//Button/Image
public void pups (View view) {
    picSet = 4;
    startActiv();
}
//Button/Image
public void ourHomes(View view) {
    picSet = 5;
    startActiv();
}
//Button/Image
public void age (View view) {
    picSet = 6;
    startActiv();
}
//Button/Image
public void family(View view) {
    picSet = 7;
    startActiv();
}
//Button/Image
public void friends (View view) {
    picSet = 8;
    startActiv();
}
}
public class PagerSetUp extends AppCompatActivity {
//Create an instance of the pager adapter class
CustomPagerAdapter mCustomPagerAdapter; //Creates content for each page
//Create an instance of the view pager class
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.collections_main); //XML File
    //Setting up the ViewPager
    mCustomPagerAdapter = new CustomPagerAdapter(this);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mCustomPagerAdapter);
}
}
public class CustomPagerAdapter extends PagerAdapter {
public int[] firstMetPics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
public int[] weddingPics = {
        R.drawable.w1,
        R.drawable.w2,
        R.drawable.w3,
        R.drawable.w4,
        R.drawable.w5
};
public int[] vacationPics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
public int[] pupsPics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
public int[] homesPics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
public int[] agePics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
public int[] familyPics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
public int[] friendsPics = {
        R.drawable.fm1,
        R.drawable.fm2,
        R.drawable.fm3,
        R.drawable.fm4,
        R.drawable.fm5
};
protected Context mContext;
LayoutInflater mLayoutInflater;
public CustomPagerAdapter(Context context) {
    mContext = context;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
//Specifies how many views to show in the ViewPager
@Override
public int getCount() {
    int picArrayLength = 0;
    switch (MainActivity.picSet) {
        case 1: picArrayLength = firstMetPics.length;
                break;
        case 2: picArrayLength = weddingPics.length;
                break;
        case 3: picArrayLength = vacationPics.length;
                break;
        case 4: picArrayLength = pupsPics.length;
                break;
        case 5: picArrayLength = homesPics.length;
                break;
        case 6: picArrayLength = agePics.length;
                break;
        case 7: picArrayLength = familyPics.length;
                break;
        case 8: picArrayLength = friendsPics.length;
                break;
        default: picArrayLength = firstMetPics.length;
                 break;
    }
    return picArrayLength;
}
@Override
public boolean isViewFromObject(View view, Object object) {
    return view ==(object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);
    ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
    switch (MainActivity.picSet) {
        case 1: imageView.setImageResource(firstMetPics[position]);
                break;
        case 2: imageView.setImageResource(weddingPics[position]);
                break;
        case 3: imageView.setImageResource(vacationPics[position]);
                break;
        case 4: imageView.setImageResource(pupsPics[position]);
                break;
        case 5: imageView.setImageResource(homesPics[position]);
                break;
        case 6: imageView.setImageResource(agePics[position]);
                break;
        case 7: imageView.setImageResource(familyPics[position]);
                break;
        case 8: imageView.setImageResource(friendsPics[position]);
                break;
        default: imageView.setImageResource(firstMetPics[position]);
                break;
    }
    container.addView(itemView);
    return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((LinearLayout) object);
    Log.i("NOTE", "destroyed view");
}

offmemory问题是由于多个问题引起的。对于您的情况,我想这是因为图像的大小和图像数量。您可以通过以下操作来删除此问题。

  • 如果这些可抽签是图标?使用矢量可绘制物而不是普通PNG。
  • 在添加到可绘制的文件夹之前,请压缩图像。
  • 将您的PNG或JPG图像转换为WebP格式。作为Android提供了对WebP Now WebP的支持。它将大大减少您的图像大小。
  • 最重要的是,不使用正常的setImagedRawable或任何方法来设置可绘制的图像。使用图像加载库,例如毕加索,滑行,壁画等,以加载可绘制到ImageView的图像。它肯定会避免使用围攻问题。

希望这将帮助您克服问题。如果您仍然有问题,请告诉我。:(

最新更新