Java 安卓-在处理图像时,最好是将其存储在临时内存中还是在临时内存中使用?

Java 安卓-在处理图像时,最好是将其存储在临时内存中还是在临时内存中使用?,java,android,bitmap,Java,Android,Bitmap,我正在尝试构建一个应用程序,用相机拍摄照片,并将其发送回主活动,以在ImageVew中显示。我看到了一个教程,在拍摄照片时将图像保存在SD卡中。我可以保存该文件,但在获取存储图像的位置时遇到困难 我认为将图像存储在SD卡中的工作太多了,因为图像没有那么重要 有没有办法将我刚用相机拍摄的图像保存在位图元素中?如果是这样,它是否比存储在SD卡中更高效 以下是我的MainActivity.java: public class MainActivity extends AppCompatActivit

我正在尝试构建一个应用程序,用相机拍摄照片,并将其发送回主活动,以在ImageVew中显示。我看到了一个教程,在拍摄照片时将图像保存在SD卡中。我可以保存该文件,但在获取存储图像的位置时遇到困难

我认为将图像存储在SD卡中的工作太多了,因为图像没有那么重要

有没有办法将我刚用相机拍摄的图像保存在位图元素中?如果是这样,它是否比存储在SD卡中更高效


以下是我的MainActivity.java:

public class MainActivity extends AppCompatActivity {
private Uri imgLocation;
ImageView mImageView;

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

    Button capture = (Button) findViewById(R.id.am_btn_camera);
    capture.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            imgLocation = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "fname_" +
                    String.valueOf(System.currentTimeMillis()) + ".jpg"));

            intent.putExtra(MediaStore.EXTRA_OUTPUT, imgLocation);
            startActivityForResult(intent, 1);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1 && resultCode == RESULT_OK) {

        Log.e("URI",imgLocation.toString());
        mImageView.setImageBitmap(BitmapFactory.decodeFile(imgLocation.toString()));
    }
}}

最好只将其保存在外部/内部存储器上,然后访问它。最好使用第三方库处理所有图像渲染及其延迟加载,如:

这些库中的大多数将重点处理来自HTTP URL的资源,但它们仍然可以用于从本地文件或内容提供商加载信息


使用位图处理图像可能会很容易导致
OutOfMemoryError
,如中所示。虽然在这种情况下,由于您只使用了一个位图,所以不必担心太多。

最好将其保存在文件系统中,并在
活动中传递
文件路径

Android位图
实际上会消耗大量内存,除非确实需要,否则将其保存在内存中永远都不是一个好主意


我知道,将其存储在文件系统中并传递文件引用有点麻烦,但它可以防止以后在应用程序中出现大量不必要的
outOfMemory
错误。

使用毕加索。它会自动将文件缓存到文件系统中


如果您需要将该文件在磁盘上保留更长时间,则必须自己保存。

您可以使用内存解决方案,例如将位图存储在单例中。但请记住,这会消耗你的Android内存。谢谢蒂姆。我曾尝试将其存储在位图中,但它是图像的较小版本,现在就可以了。以我为例。使用毕加索从文件系统加载图像