安卓:java.lang.OutOfMemoryError: [英] Android : java.lang.OutOfMemoryError:
问题描述
我开发了使用大量的图像在Android上的应用程序。
I developed an application that uses lots of images on Android.
有很多图片present在绘制文件夹中说,超过100,我开发的应用程序的影像动画。我用的ImageView显示GIF图像。我已经使用了拆分GIF图像的概念分为多个PNG格式的图片,然后使用它。
There are lots of images present in drawable folder say more then 100, I am developing application for animation of images. I used imageview to show GIF images. I have used the concept of Split gif images into multiple PNG format images and then use it.
每个用户输入到应用程序的时候,我可以看到内存变得越来越多,直到用户获取 java.lang.OutOfMemoryError
。
Each time the user enters to the app, I can see the memory growing more and more until user gets the java.lang.OutOfMemoryError
.
那么,什么是最好的/正确的方式来处理大量图像?
So what is the best/correct way to handle many images?
下面是我的code:
dog_animation.xml
dog_animation.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/DogView"
android:orientation="vertical" >
<ImageView
android:id="@+id/dog_animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.19" />
dog_animation.xml(可绘制文件夹)
dog_animation.xml (Drawable folder)
<?xml version="1.0" encoding="utf-8"?>
<item
android:drawable="@drawable/image"
android:duration="50"/>
<item
android:drawable="@drawable/image1"
android:duration="50"/>
<item
android:drawable="@drawable/image2"
android:duration="50"/>
<item
android:drawable="@drawable/image3"
android:duration="50"/>
<item
android:drawable="@drawable/image4"
android:duration="50"/>
<item
android:drawable="@drawable/image5"
android:duration="50"/>
<item
android:drawable="@drawable/image6"
android:duration="50"/>
<item
android:drawable="@drawable/image7"
android:duration="50"/>
<item
android:drawable="@drawable/image8"
android:duration="50"/>
<item
android:drawable="@drawable/image9"
android:duration="50"/>
<item
android:drawable="@drawable/image10"
android:duration="50"/>
<item
android:drawable="@drawable/image11"
android:duration="50"/>
<item
android:drawable="@drawable/image12"
android:duration="50"/>
<item
android:drawable="@drawable/image13"
android:duration="50"/>
<item
android:drawable="@drawable/image14"
android:duration="50"/>
<item
android:drawable="@drawable/image15"
android:duration="50"/>
<item
android:drawable="@drawable/image16"
android:duration="50"/>
<item
android:drawable="@drawable/image17"
android:duration="50"/>
<item
android:drawable="@drawable/image18"
android:duration="50"/>
<item
android:drawable="@drawable/image19"
android:duration="50"/>
<item
android:drawable="@drawable/image20"
android:duration="50"/>
<item
android:drawable="@drawable/image21"
android:duration="50"/>
<item
android:drawable="@drawable/image22"
android:duration="50"/>
<item
android:drawable="@drawable/image23"
android:duration="50"/>
<item
android:drawable="@drawable/image24"
android:duration="50"/>
<item
android:drawable="@drawable/image25"
android:duration="50"/>
<item
android:drawable="@drawable/image26"
android:duration="50"/>
<item
android:drawable="@drawable/image27"
android:duration="50"/>
<item
android:drawable="@drawable/image28"
android:duration="50"/>
<item
android:drawable="@drawable/image29"
android:duration="50"/>
<item
android:drawable="@drawable/image30"
android:duration="50"/>
<item
android:drawable="@drawable/image31"
android:duration="50"/>
<item
android:drawable="@drawable/image32"
android:duration="50"/>
<item
android:drawable="@drawable/image33"
android:duration="50"/>
<item
android:drawable="@drawable/image34"
android:duration="50"/>
<item
android:drawable="@drawable/image35"
android:duration="50"/>
<item
android:drawable="@drawable/image36"
android:duration="50"/>
<item
android:drawable="@drawable/image37"
android:duration="50"/>
<item
android:drawable="@drawable/image38"
android:duration="50"/>
<item
android:drawable="@drawable/image39"
android:duration="50"/>
<item
android:drawable="@drawable/image40"
android:duration="50"/>
<item
android:drawable="@drawable/image41"
android:duration="50"/>
<item
android:drawable="@drawable/image42"
android:duration="50"/>
<item
android:drawable="@drawable/image43"
android:duration="50"/>
<item
android:drawable="@drawable/image44"
android:duration="50"/>
<item
android:drawable="@drawable/image45"
android:duration="50"/>
<item
android:drawable="@drawable/image46"
android:duration="50"/>
<item
android:drawable="@drawable/image47"
android:duration="50"/>
<item
android:drawable="@drawable/image48"
android:duration="50"/>
<item
android:drawable="@drawable/image49"
android:duration="50"/>
<item
android:drawable="@drawable/image50"
android:duration="50"/>
<item
android:drawable="@drawable/image51"
android:duration="50"/>
<item
android:drawable="@drawable/image52"
android:duration="50"/>
<item
android:drawable="@drawable/image53"
android:duration="50"/>
<item
android:drawable="@drawable/image54"
android:duration="50"/>
<item
android:drawable="@drawable/image55"
android:duration="50"/>
<item
android:drawable="@drawable/image56"
android:duration="50"/>
Dog_Animation.java
Dog_Animation.java
public class Dog_Animation extends Activity {
Timer timer = new Timer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.dog_animation);
ImageView img = (ImageView) findViewById(R.id.dog_animation);
img.setBackgroundResource(R.drawable.dog_animation);
AnimationDrawable frameAnimation = (AnimationDrawable) img
.getBackground();
frameAnimation.start();
timer.schedule(new TimerTask() {
public void run() {
Intent intent = new Intent(Dog_Animation.this,
Man_Animation.class);
startActivity(intent);
}
}, 10000);
}
}
现在的问题是,当我尝试从一个活动转移到另一个具有相同的其他图片动画它给了我 java.lang.OutOfMemory
的错误。
Now the problem is when i try to move from one activity to another which has same some other image to animate it's giving me error of java.lang.OutOfMemory
.
我已经试过有这么多不同的解决方案,如
I have tried with so many different solution like
@Override
protected void onDestroy() {
super.onDestroy();
unbindDrawables(findViewById(R.id.DogView));
System.gc();
}
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
等其它也不过任何解决方案是不是为我工作。请帮我解决这个问题。即使我已经提到<一个href="http://androidactivity.word$p$pss.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/">http://androidactivity.word$p$pss.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/这种联系,但没有得到解决的问题。
and so other also but any solution is not working for me. Please help me to solve this issue. even i have referred http://androidactivity.wordpress.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/ this link but not getting solve the issue.
推荐答案
在你的AndroidManifest.xml中保持这里面的应用程序标签中,添加largeHeap是这样的:
In your AndroidManifest.xml keep this inside application tag, add largeHeap like this:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"/>
这篇关于安卓:java.lang.OutOfMemoryError:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!