我有一个正在制作的应用程序,并且在Galaxy设备上遇到了很多崩溃。
堆栈跟踪:
java.lang.OutOfMemoryError at android.graphics.Bitmap.nativeCreate(Native Method)at android.graphics.Bitmap.createBitmap(Bitmap.java:669)at android.graphics.Bitmap.createBitmap(Bitmap.java:604)at android.graphics.Bitmap.createBitmap(Bitmap.java:530)at com.edmodo.cropper.CropImageView.getCroppedImage(CropImageView.java:357) 在com.myapp.app.MyPhotoActivity $ 3.onClick(MyPhotoActivity.java:308) 在android.view.View.performClick(View.java:4191)at android.view.View $ PerformClick.run(View.java:17229)at android.os.Handler.handleCallback(Handler.java:615)at android.os.Handler.dispatchMessage(Handler.java:92)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:4960)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:511)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1038) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)at dalvik.system.NativeStart.main(原生方法)
设备类型:
Galaxy S2(GT-I9100T)Galaxy S2(SGH-T989)Galaxy Note II(t03g)
Galaxy Note2(t0ltetmo)Galaxy Note2(t0ltespr)Galaxy S3(d2vmu)
Electrify M(至日)Galaxy S5(kltespr)Galaxy Exhibit (codinaMetroPCS)Galaxy S3(d2tmo)Galaxy S3(d2ltetmo)Galaxy S2 史诗(SPH-D710)Galaxy Win(delos3geur)
CropImageView
// Crop the subset from the original Bitmap. (line 357 below)
final Bitmap croppedBitmap = Bitmap.createBitmap(mBitmap,
(int) actualCropX,
(int) actualCropY,
(int) actualCropWidth,
(int) actualCropHeight);
return croppedBitmap;
}
MyPhotoActivity
usePhotoButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
// line 308 below
finalResizedBitmap = getResizedBitmap(mImageView.getCroppedImage(), PHOTO_RESIZE_VALUE, PHOTO_RESIZE_VALUE);
topCropView.setVisibility(View.GONE);
topFinalView.setVisibility(View.VISIBLE);
mFinalImageView.setImageBitmap(finalResizedBitmap);
usePhotoButton.setVisibility(View.GONE);
uploadPhotoButton.setEnabled(true);
uploadPhotoButton.setVisibility(View.VISIBLE);
}
});
问题是我没有任何这些设备可以测试 - 任何想法??
答案 0 :(得分:0)
分配给您的应用程序的内存堆因设备而异,这就是您根据设备看到可变性的原因。某些设备上可能只有16MB的RAM。您可以谷歌查找有问题的设备上的堆大小。
http://developer.android.com/training/articles/memory.html
在Android 3.0之前,位图分配是在“本机”堆中完成的,因此您也会看到一些可变性。对于使用本机堆进行位图分配的设备,我总是发现本机堆的大小与VM堆大小相同。
https://developer.android.com/training/displaying-bitmaps/manage-memory.html
您需要使用BitmapOptions和适当的缩放来降低内存使用量。
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
该文章中的例子非常好,所以我不再重复如何使用它们的例子。
如果您认为有必要,可以监控堆使用情况,以避免进行导致OOM的分配。
How do I detect the heap size usage of an android application
希望这有帮助!