我已经在play商店发布了我的应用程序。现在在Crashes和and中,我在两个设备(Galaxy Note3和Galaxy Note II)上得到了以下错误。我不知道如何解决这些错误,这是什么类型的错误?因此,请帮助我修复这些错误。在其他设备上,我在那里没有得到任何报告。
错误-
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:677)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:507)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872)
at android.content.res.Resources.loadDrawable(Resources.java:3022)
at android.content.res.Resources.getDrawable(Resources.java:1586)
at android.view.View.setBackgroundResource(View.java:16120)
at com.info.laughingbuddha.Buddha4.onCreateView(Buddha4.java:21)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:572)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5293)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1259)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
at dalvik.system.NativeStart.main(Native Method)Buddha4.java-
package com.info.laughingbuddha;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class Buddha4 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.buddha, container, false);
TextViewEx t = (TextViewEx) rootView.findViewById(R.id.textView2);
t.setText("The Standing Happy Buddha brings riches and happiness.",true);
t.setMovementMethod(new ScrollingMovementMethod());
ImageView iv = (ImageView) rootView.findViewById(R.id.image1);
iv.setBackgroundResource(R.drawable.buddha4);
return rootView;
}
}我不知道我需要发布什么代码,所以如果有人需要任何与此相关的代码,请评论。谢谢。
发布于 2014-02-15 17:28:21
尝试使用以下代码行创建按比例缩放的位图:
Bitmap scaledBitmap = Bitmap.createScaledBitmap(myBitmap, width,
height, true);检查以下链接:
android - out of memory exception when creating bitmap
Android out of memory exception with bitmaps
Can I catch out of memory exception in Android in Bitmap allocation for decoding a picture file?
发布于 2014-02-22 14:39:56
如果你有高分辨率的图像,你应该缩小它们,以避免不同的设备加载图像,而不会面临内存问题。在你的例子中,一些手机在第一次运行时可能不会表现出相同的行为,但最终,如果没有处理优化的图像加载解决方案,应用程序将崩溃。
查看更多关于“内存问题”的信息:
将缩容版本加载到内存下的主题。
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
Out of memory error on Android
关于如何避免它们:
How to avoid an out of memory error while using bitmaps in Android
有关概述,请参阅:
http://blogs.innovationm.com/android-out-of-memory-error-causes-solution-and-best-practices/ http://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html
在将可绘制项目设置为图像视图的背景之前,例如:
iv.setBackgroundResource(R.drawable.buddha4); 正如@rup35h在答案中建议的那样,获取缩放的位图或尝试其他选项,如inSampleSize,请务必检查您的解决方案如何影响您的图像质量。
发布于 2014-02-22 16:38:19
有时,当我们在应用程序中使用如此多的图像和背景时,它会占用android RAM上的大量空间。这会导致通过“超出内存限制异常”来强制关闭应用程序。
从你的崩溃日志看,你有一个很大的可压缩文件,所以为了避免OutOfMemory,你保留了不会占用太多内存的可压缩文件。你也可以像一些人在答案中建议的那样缩小绘图范围。
如果您不想经历这种情况,并且您没有太多可绘制的大小,那么您可以选择将您的应用程序堆大小增加到较大,这将增加堆内存。
如何增加堆大小
你可以在安卓清单的应用程序标签中使用android:largeHeap="true"来请求更大的堆大小,但这在任何蜂巢之前的设备上都不起作用。
在2.3之前的设备上,你可以使用VMRuntime类,但这在姜饼和更高版本上不起作用,请参阅下面的操作方法。
VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE);在设置HeapSize之前,请确保输入了不会影响其他应用程序或操作系统功能的适当大小。
在设置之前,只需检查您的应用程序的大小,然后设置大小以完成您的工作。不要使用太多内存,否则其他应用程序可能会受到影响。
更新
注意:当不再需要位图时,释放分配的位图内存始终是最佳实践,您可以使用此bitmap.recycle()
https://stackoverflow.com/questions/21795645
复制相似问题