Android Fragment.onCreateView中的OutOfMemoryError

Android Fragment.onCreateView中的OutOfMemoryError,android,out-of-memory,Android,Out Of Memory,我的android应用程序在某些设备上运行良好,但在其他设备上崩溃。在我的开发人员控制台上,它在ChaptersFragment.onCreateView中显示OutOfMemoryError。我已经给出了下面的代码。我是一个新手,这是我的第一个android应用程序。这有解决办法吗?还是我做错了什么 public class ChaptersFragment extends Fragment { private CardView c1,c2,c3,c4,c5,c6,c7,c8,c9; @Nul

我的android应用程序在某些设备上运行良好,但在其他设备上崩溃。在我的开发人员控制台上,它在ChaptersFragment.onCreateView中显示OutOfMemoryError。我已经给出了下面的代码。我是一个新手,这是我的第一个android应用程序。这有解决办法吗?还是我做错了什么

public class ChaptersFragment extends Fragment {
private CardView c1,c2,c3,c4,c5,c6,c7,c8,c9;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable 
ViewGroup container, @Nullable Bundle savedInstanceState) {
    View myView = inflater.inflate(R.layout.fragment_chapters, container, false);
    c1 = (CardView) myView.findViewById(R.id.chapter1);
    c2 = (CardView) myView.findViewById(R.id.chapter2);
    c3 = (CardView) myView.findViewById(R.id.chapter3);
    c4 = (CardView) myView.findViewById(R.id.chapter4);
    c5 = (CardView) myView.findViewById(R.id.chapter5);
    c6 = (CardView) myView.findViewById(R.id.chapter6);
    c7 = (CardView) myView.findViewById(R.id.chapter7);
    c8 = (CardView) myView.findViewById(R.id.chapter8);
    c9 = (CardView) myView.findViewById(R.id.chapter9);


    c1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap1.class);
            in.putExtra("some", "Introduction to Stock Markets");
            startActivity(in);
        }
    });

    c2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap2.class);
            in.putExtra("some", "Technical Analysis");
            startActivity(in);
        }
    });

    c3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap3.class);
            in.putExtra("some", "Fundamental Analysis");
            startActivity(in);
        }
    });

    c4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap4.class);
            in.putExtra("some", "Futures Trading");
            startActivity(in);
        }
    });

    c5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap5.class);
            in.putExtra("some", "Options Theory for Professional Trading");
            startActivity(in);
        }
    });

    c6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap6.class);
            in.putExtra("some", "Options Strategies");
            startActivity(in);
        }
    });

    c7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap7.class);
            in.putExtra("some", "Markets and Taxation");
            startActivity(in);
        }
    });

    c8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap8.class);
            in.putExtra("some", "Currency and Commodity Futures");
            startActivity(in);
        }
    });

    c9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(getActivity(), Chap9.class);
            in.putExtra("some", "Risk Management & Trading Psychology");
            startActivity(in);
        }
    });

    return myView;
 }
}

当您在布局上设置图像时,渲染的图像将尝试将其缩放到所需的大小,并尝试在屏幕上容纳它,在此过程中,它将消耗一些内存。根据设备上可用的内存,它将很容易达到Android操作系统计算的每个应用程序的最大可用内存百分比

700px可能看起来不多,但如果在布局中加载了9个图像,并且系统必须将其中一些图像的大小调整到较低的分辨率以适合您的屏幕,则处理这些图像所需的内存总和将导致内存不足错误

这就是为什么您必须为应用程序中的每个目标设备分辨率创建多个包含不同图像大小的可绘制文件夹的原因。不必精确,但必须手动调整图像大小,使其接近屏幕上的所需大小,以避免渲染过程中内存消耗


布局文件中是否有一些高分辨率图像可绘制?背景还是什么?内存不足的设备将无法加载和渲染高分辨率图像。布局文件中放置了一些可绘制图像。但是,可绘制文件的总大小为1.02MB,最大分辨率为700 x 700像素