java.lang.OutOfMemoryError在我的Andr​​oid应用程序 [英] java.lang.OutOfMemoryError in my android application

查看:128
本文介绍了java.lang.OutOfMemoryError在我的Andr​​oid应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有创建一个花时重叠海誓山盟在我和应用程序栈18的图像。所有图像都加入到活动中的XML文件的android:源:@绘制/布拉布拉.. ...然而,当我跑我的应用程序,它会返回一个错误 java.lang.OutOfMemoryError 。请帮我...我不知道我怎么能解决这个problem.Thank你......

 公共类PapatyaFaliActivity延伸活动{
     私人诠释[] startLeafID={R.id.imag,R.id.birstart,R.id.ikistart,R.id.ucstart,R.id.dortstart,R.id.besstart,R.id.altistart,R.id.yedistart,
        R.id.sekizstart,R.id.dokuzstart,R.id.onstart,R.id.onbirstart,R.id.onikistart,R.id.onucstart,R.id.ondortstart,R.id.onbesstart,R.id.onaltistart};
    私人ImageView的[] leafstart =新ImageView的[17];
    私人诠释[] leafResouseID={R.drawable.papatya_orta,R.drawable.leaf_1,R.drawable.leaf_2,R.drawable.leaf_3,R.drawable.leaf_4,R.drawable.leaf_5,R.drawable.leaf_6,
        R.drawable.leaf_7,R.drawable.leaf_8,R.drawable.leaf_9,R.drawable.leaf_10,R.drawable.leaf_11,R.drawable.leaf_12,R.drawable.leaf_13,
        R.drawable.leaf_14,R.drawable.leaf_15,R.drawable.leaf_16};    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        的for(int i = 0; I< 17;我++){
            leafstart [I] =(ImageView的)findViewById(startLeafID [I]);
        }
        的for(int i = 0; I< 17;我++){
            leafstart [I] .setImageResource(leafResouseID [I]);
        }        螺纹timerThread =新主题(){
            @覆盖
            公共无效的run(){
                尝试{
                    睡眠(2000);                }赶上(例外五){
                    e.printStackTrace();
                }最后{
                    意图menuIntent =新意图(getBaseContext(),MenuFrame.class);
                    startActivity(menu​​Intent);
                }
            }        };
        timerThread.start();
    }
    @覆盖
    保护无效的onPause(){
        super.onPause();
        的for(int i = 0; I< 17;我++){
            leafstart [I] .setImageResource((整数)NULL);
        }
        完();
    }
}


解决方案

18的图像它不是一个大数目。如果你有OutOfMemoryError异常,这意味着您的图片只是大。最简单,最好的办法是调整(降低)这些图像的分辨率,你真正需要的大小。

如果您需要与喜清晰度的图像,那么你应该在使用的情况下,如果缩影他们在小规模显示出一些奇怪的原因,因此在一次只有一个或两个图像在全分辨率psented $ P $。
为了使这取决于细节水平绘制项目交替使用的ImageView .setImageLevel (改变的细节水平),并定义资源作为 LevelListDrawable

调用的完成的里面的的onPause 的是非常糟糕的主意!

I have 18 images which create a flower when overlap eachother as a stack in my and app. All images are added to activity in XML file android:src:'@drawable/blabla..'... However when I run my app , it returns an error java.lang.OutOfMemoryError .Please help me... I dont know how I can solve this problem.Thank you...

public class PapatyaFaliActivity extends Activity {
     private int[] startLeafID={R.id.imag,R.id.birstart,R.id.ikistart,R.id.ucstart,R.id.dortstart,R.id.besstart,R.id.altistart,R.id.yedistart,
        R.id.sekizstart,R.id.dokuzstart,R.id.onstart,R.id.onbirstart,R.id.onikistart,R.id.onucstart,R.id.ondortstart,R.id.onbesstart,R.id.onaltistart};
    private ImageView[] leafstart=new ImageView[17];
    private int[] leafResouseID={R.drawable.papatya_orta,R.drawable.leaf_1,R.drawable.leaf_2,R.drawable.leaf_3,R.drawable.leaf_4,R.drawable.leaf_5,R.drawable.leaf_6,
        R.drawable.leaf_7,R.drawable.leaf_8,R.drawable.leaf_9,R.drawable.leaf_10,R.drawable.leaf_11,R.drawable.leaf_12,R.drawable.leaf_13,
        R.drawable.leaf_14,R.drawable.leaf_15,R.drawable.leaf_16};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        for(int i=0;i<17;i++){
            leafstart[i]=(ImageView) findViewById(startLeafID[i]);
        }
        for(int i=0;i<17;i++){
            leafstart[i].setImageResource(leafResouseID[i]);
        }

        Thread timerThread=new Thread(){
            @Override
            public void run() {
                try {
                    sleep(2000);

                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    Intent menuIntent=new Intent(getBaseContext(),MenuFrame.class);
                    startActivity(menuIntent);
                }
            }

        };
        timerThread.start();
    }
    @Override
    protected void onPause() {
        super.onPause();
        for(int i=0;i<17;i++){
            leafstart[i].setImageResource((Integer) null);
        }
        finish();
    }
}

解决方案

18 images it is not a big number. If you have OutOfMemoryError this means that your images are simply to big. Simplest and best approach is to adjust (reduce) resolution of those images to the size you really need.

If for some strange reason you need images with hi resolution then you should use miniatures in case if they are shown in small scale, so only one or two images at once are presented in full resolution. To make alternations of drawable item depending of level of details use ImageView.setImageLevel (to change level of details) and define resource as LevelListDrawable.

Calling finish inside onPause is very bad idea!

这篇关于java.lang.OutOfMemoryError在我的Andr​​oid应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆