0

我正在使用 Activity Result API 从图库中获取多个内容(因为不推荐使用 startActivityForResult())。

MainActivity.java


LinearLayout ll;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn = (Button) findViewById(R.id.btn);
    ll = (Button) findViewById(R.id.ll);
    
    btn.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
             launchImage.launch("image/*");
         }
    });
}

ActivityResultLauncher<String> launchImage= registerForActivityResult(
            new ActivityResultContracts.GetMultipleContents(),
            new ActivityResultCallback<List<Uri>>() {
                @Override
                public void onActivityResult(List<Uri> uri) {
                    try {
                        for (int i = 0; i < uri.size(); i++) {
                            ImageView imageView = new ImageView(MainActivity.this);
                            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(600,800);
                            lp.setMargins(0, 50, 0, 0);
                            imageView.setLayoutParams(lp);
                            imageView.setImageURI(uri.get(i));

                            ll.addView(imageView);
                        }
                    }
                    catch (NullPointerException e) {
                        e.printStackTrace();
                    }
               }
        });

问题是当添加太多图像时,我的应用程序崩溃并显示 OutOfMemoryError。我相信问题在于这些图像的文件大小。
如何减小此 ActivityResult API 上的图像大小?

任何帮助,将不胜感激。
提前致谢。

来自 LogCat 的错误:java.lang.OutOfMemoryError:无法分配 38937612 字节分配,16772728 个可用字节和 19MB 直到 OOM

4

0 回答 0