私はデバイスを持っています(サムスンギャラクシーフィット)。デバイスの電源を入れると、ホーム画面に移動できず、ロードが続行されます。デバイスを接続してlogcatを表示すると、logcatエラーが表示されました-
"FATAL EXCEPTION IN SYSTEM PROCESS: ActivityManager and java.lang.OutOfMemoryError: [memory exhausted]"
それをどのように処理しますか?
私はデバイスを持っています(サムスンギャラクシーフィット)。デバイスの電源を入れると、ホーム画面に移動できず、ロードが続行されます。デバイスを接続してlogcatを表示すると、logcatエラーが表示されました-
"FATAL EXCEPTION IN SYSTEM PROCESS: ActivityManager and java.lang.OutOfMemoryError: [memory exhausted]"
それをどのように処理しますか?
メモリ不足エラーを解決する方法がいくつかあります
最初にこのようにビットマップをリサイクルします
bmp.recycle();
bmp = null;
2番目にガベージコレクターを使用する
System.runFinalization();
Runtime.getRuntime().gc();
System.gc();
しかし、ここにコードの一部を投稿すると、私や他の人がもっと助けてくれるので、もっと良いでしょう:)
次のコードを使用して、OutOfMemory エラーを確認する必要があります
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
try
{
// We need to recyle unused bitmaps
if (Main_bitmap != null)
{
Main_bitmap.recycle();
}
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor.moveToFirst())
{
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds=true;
BitmapFactory.decodeFile(filePath,bmpFactoryOptions);
if ( checkBitmapFitsInMemory(bmpFactoryOptions.outWidth,bmpFactoryOptions.outHeight, 2))
{
BitmapFactory.Options options4 = new BitmapFactory.Options();
options4.inSampleSize = 1;
Main_bitmap = BitmapFactory.decodeFile(filePath, options4);
iv_set_image.setImageBitmap(Main_bitmap);
}
else
{
Toast.makeText(this,"java.lang.OutOfMemoryError:", 1).show();
}
cursor.close();
}
catch (Exception e)
{
e.printStackTrace();
}
super.onActivityResult(requestCode, resultCode, data);
}
public static boolean checkBitmapFitsInMemory(long bmpwidth,long bmpheight, int bmpdensity )
{
long reqsize=bmpwidth*bmpheight*bmpdensity;
long allocNativeHeap = Debug.getNativeHeapAllocatedSize();
final long heapPad=(long) Math.max(4*1024*1024,Runtime.getRuntime().maxMemory()*0.1);
if ((reqsize + allocNativeHeap + heapPad) >= Runtime.getRuntime().maxMemory())
{
return false;
}
return true;
}