当我在模拟器中运行我的应用程序时,它的工作正常,但是当我在Android手机中运行它时,它显示强制关闭错误。
这是我的日志
08-03 02:04:36.602: E/AndroidRuntime(15464): FATAL EXCEPTION: main
08-03 02:04:36.602: E/AndroidRuntime(15464): java.lang.OutOfMemoryError: (Heap Size=47623KB, Allocated=39485KB)
08-03 02:04:36.602: E/AndroidRuntime(15464): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
08-03 02:04:36.602: E/AndroidRuntime(15464): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:626)
08-03 02:04:36.602: E/AndroidRuntime(15464): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:730)
08-03 02:04:36.602: E/AndroidRuntime(15464): at com.example.fatwallet.MyAdapter.setDrawable(MyAdapter.java:83)
08-03 02:04:36.602: E/AndroidRuntime(15464): at com.example.fatwallet.MyAdapter.getView(MyAdapter.java:69)
08-03 02:04:36.602: E/AndroidRuntime(15464): at android.widget.AbsListView.obtainView(AbsListView.java:2334)
08-03 02:04:36.602: E/AndroidRuntime(15464): at android.widget.ListView.measureHeightOfChildren(ListView.java:1409)``
83号线是...
setDrawable(image, dataObj.getImageId());
69号线是..
private void setDrawable(ImageView image, String drawableName) {
AssetManager manager = image.getContext().getAssets();
InputStream open = null;
try {
open = manager.open(drawableName+".jpg");
Bitmap bitmap = BitmapFactory.decodeStream(open);
// Assign the bitmap to an ImageView in this layout
image.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (open != null) {
try {
open.close();
} catch (IOException e) {
e.printStackTrace();
最佳答案
您正在尝试将大文件映射到内存中。尝试在清单中设置:
<application
android:largeHeap="true">
. . .
</application>
但是,这是不鼓励的解决方案。根据官方文档:
大多数应用程序不需要此,而应专注于减少整体内存使用量以提高性能。启用此功能也不能保证可用内存的固定增加,因为某些设备受到其总可用内存的限制。
链接here。
关于java - 在Android手机中显示强制关闭错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25099530/