崩溃报告 - 它说什么,如何解决? [英] Crash report - what does it say and how to solve?

查看:157
本文介绍了崩溃报告 - 它说什么,如何解决?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人能请解释一下这是什么问题,并告诉我会有什么解决办法?
我的应用程序使用,在它膨胀,并显示图像的列表视图。这些图像是非常小的尺寸只有几KBS(每次不少于20 KBS)......一些看法只有一个或两个列表中的图像,但一些有多达12幅影像。

  java.lang.OutOfMemoryError
在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)
在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:677)
在android.graphics.BitmapFactory.de codeResourceStream(BitmapFactory.java:507)
在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872)
在android.content.res.Resources.loadDrawable(Resources.java:3022)
在android.content.res.Resources.getDrawable(Resources.java:1586)
在android.widget.ImageView.resolveUri(ImageView.java:648)
在android.widget.ImageView.setImageResource(ImageView.java:377)
在com.admads.android.HisnulMuslim_Google_JQM.DuaAdapter.getView(DuaAdapter.java:78)
在android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:230)
在android.widget.AbsListView.obtainView(AbsListView.java:2707)
在android.widget.ListView.makeAndAddView(ListView.java:1801)
在android.widget.ListView.fillDown(ListView.java:697)
在android.widget.ListView.fillGap(ListView.java:661)
在android.widget.AbsListView.trackMotionScroll(AbsListView.java:6651)
在android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3916)
在android.widget.AbsListView.onTouchMove(AbsListView.java:4756)
在android.widget.AbsListView.onTouchEvent(AbsListView.java:4582)
在android.view.View.dispatchTouchEvent(View.java:8093)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2129)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2252)
在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1587)
在android.app.Activity.dispatchTouchEvent(Activity.java:2507)
在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2200)
在android.view.View.dispatchPointerEvent(View.java:8301)
在android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4531)
在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4403)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3961)
在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4015)
在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3984)
在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:4095)
在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3992)
在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:4152)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3961)
在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4015)
在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3984)
在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3992)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3961)
在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6320)
在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6222)
在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6193)
在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6158)
在android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6400)
在android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
在android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(本机方法)
在android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
在android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6373)
在android.view.ViewRootImpl $ ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6419)
在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:803)
在android.view.Choreographer.doCallbacks(Choreographer.java:603)
在android.view.Choreographer.doFrame(Choreographer.java:571)
在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:789)
在android.os.Handler.handleCallback(Handler.java:733)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:157)
在android.app.ActivityThread.main(ActivityThread.java:5293)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
在dalvik.system.NativeStart.main(本机方法)

code为主要活性的主要部分]

 公共无效的onCreate(最终捆绑savedInstanceState){
        super.onCreate(savedInstanceState);        上下文= getApplicationContext();
        的setContentView(R.layout.myact);
        getActionBar()setDisplayHomeAsUpEnabled(真)。        最后DataBaseHelper DB =新DataBaseHelper(背景);
        尝试{db.createDataBase();}赶上(IOException异常五){e.printStackTrace();}
        db.openDataBase();        如果(savedInstanceState == NULL){}        CD = db.getDetsById(IID);        二元=(ListView控件)findViewById(R.id.dua_list);        prepareList();        getActionBar()setDisplayHomeAsUpEnabled(真)。        mAdapter1 =新DuaAdapter(getApplicationContext(),duaItems);
        dualist.setAdapter(mAdapter1);        db.close();        prevbtn.setOnClickListener(新OnClickListener(){
            @覆盖
            公共无效的onClick(查看为arg0){
                currentDua--;
                意向意图= getIntent();
                intent.putExtra(IID,currentDua);
                完成(); startActivity(意向);
                overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right);
            }
        });
        nxtbtn.setOnClickListener(新OnClickListener(){
            @覆盖
            公共无效的onClick(查看为arg0){
                currentDua ++;
                意向意图= getIntent();
                intent.putExtra(IID,currentDua);
                完();
                startActivity(意向);
                overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
            }
        });    公共无效prepareList(){
          duaItems =新的ArrayList< D​​uaItem>();
          cd.moveToFirst();
          做{              duaItems.add(新DuaItem(isTopV,cd.getString(1),isImgV,cd.getString(2),isAudV,cd.getString(3),isTransV,cd.getString(4),isTranslitV,cd.getString(5 )));          }而(cd.moveToNext());    }

适配器类[主体]

  @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        如果(convertView == NULL){
            LayoutInflater mInflater =(LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.list_item_dua,NULL);
        }        TextView的textViewTop =(TextView中)convertView.findViewById(R.id.textViewTop);
        ImageView的imageViewDua =(ImageView的)convertView.findViewById(R.id.imageViewDua);
        最终按钮btnPP =(按钮)convertView.findViewById(R.id.playpause);
        TextView的txtViewTranslation =(TextView中)convertView.findViewById(R.id.txtViewTranslation);
        TextView的txtViewTransliteration =(TextView中)convertView.findViewById(R.id.txtViewTransliteration);        textViewTop.setText(Html.fromHtml(duaItems.get(位置).getTop()));
        INT渣油= context.getResources()则getIdentifier(duaItems.get(位置).getImage(),绘制,context.getPackageName());
        imageViewDua.setImageResource(渣油);        txtViewTranslation.setText(T1);        txtViewTransliteration.setText(T2);        最终诠释audId = context.getResources()则getIdentifier(duaItems.get(位置).getAudio(),生,context.getPackageName())。
        btnP​​P.setOnClickListener(新View.OnClickListener(){
                公共无效的onClick(视图v){
                    如果(mPlayer.isPlaying()){
                        mPlayer.reset(); btnP​​P.setText(C);
                        }其他{
                        mPlayer.release(); MPLAYER = MediaPlayer.create(背景下,audId);
                        //尝试{MPLAYER prepare()。 }赶上(IllegalStateException异常五){e.printStackTrace(); }赶上(IOException异常五){e.printStackTrace(); }
                        mPlayer.start(); btnP​​P.setText(一);
                        mPlayer.setOnCompletionListener(新OnCompletionListener(){公共无效onCompletion(MediaPlayer的MP){
                            mPlayer.reset(); mPlayer.release(); btnP​​P.setText(C);}
                        });
                    }                }
            });        返回convertView;
    }}


解决方案

内存不足(OOM)错误

内存不足错误是,当你正在为多个图像集或大型位图或一些动画的东西有关系的应用发展非常常见的错误。在这种情况下,我们必须非常小心,同时高效处理图像或对象的分配和释放。当分配穿过堆限制或要求过程跨越堆限制的内存量OOM错误出现。

在Android中,每个应用程序在Linux进程中运行。每个Linux进程都有一个虚拟机(Dalvik虚拟机)里面运行。有一个进程可以要求内存的限制,这是为不同的设备不同,也不同于手机和平板电脑。当一些工艺要求比其极限的更高的内存则会导致错误即内存不足错误。

可能的原因:

有原因,为什么我们得到一个内存不足的错误数。他们有些是:


  1. 您正在做一些操作,不断地需要大量的内存,在某些时候它超越进程的最大堆内存限制。


  2. 您正在泄漏一些内存即你没有做previous对象,您分配符合垃圾回收(GC)。这就是所谓的内存泄漏。


  3. 您正在处理大量位图和加载所有的人都在运行时。你必须有大的位图通过加载,你不需要整个位图一次规模很小心处理,然后做缩放。


有关内存不足的最大原因是内存泄漏。

这里更多。

如果您正在加载重的图像,从资源 OOM 将出现。 此处是从资源文件夹加载重的图像的最佳方式。请通过它去。

Can anybody please explain what is this problem and tell me what would be the solution? My app uses a listview that inflates and shows images in it. The images are very small size just a few kbs (less than 20 kbs each) ....some views have only one or two images in the list but some have up to 12 images.

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.widget.ImageView.resolveUri(ImageView.java:648)
at android.widget.ImageView.setImageResource(ImageView.java:377)
at com.admads.android.HisnulMuslim_Google_JQM.DuaAdapter.getView(DuaAdapter.java:78)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:230)
at android.widget.AbsListView.obtainView(AbsListView.java:2707)
at android.widget.ListView.makeAndAddView(ListView.java:1801)
at android.widget.ListView.fillDown(ListView.java:697)
at android.widget.ListView.fillGap(ListView.java:661)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:6651)
at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3916)
at android.widget.AbsListView.onTouchMove(AbsListView.java:4756)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:4582)
at android.view.View.dispatchTouchEvent(View.java:8093)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2129)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2144)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2252)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1587)
at android.app.Activity.dispatchTouchEvent(Activity.java:2507)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2200)
at android.view.View.dispatchPointerEvent(View.java:8301)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4531)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4403)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3961)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4015)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3984)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4095)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3992)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4152)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3961)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4015)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3984)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3992)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3961)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6320)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6222)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6193)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6158)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6400)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6373)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6419)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:571)
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:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)

Code for Main activity [ the main part]

public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        context = getApplicationContext();
        setContentView(R.layout.myact);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        final DataBaseHelper db = new DataBaseHelper(context);
        try {db.createDataBase();} catch (IOException e) {e.printStackTrace();}
        db.openDataBase();  

        if (savedInstanceState == null) { }

        cd = db.getDetsById(iid);

        dualist = (ListView) findViewById(R.id.dua_list);

        prepareList();

        getActionBar().setDisplayHomeAsUpEnabled(true);

        mAdapter1 = new DuaAdapter(getApplicationContext(),duaItems);
        dualist.setAdapter(mAdapter1);

        db.close();

        prevbtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                currentDua--;
                Intent intent = getIntent();
                intent.putExtra("iid", currentDua);
                finish();startActivity(intent);
                overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
            }
        });
        nxtbtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                currentDua++;
                Intent intent = getIntent();
                intent.putExtra("iid", currentDua);
                finish();
                startActivity(intent);
                overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
            }
        });

    public void prepareList() {
          duaItems = new ArrayList<DuaItem>();
          cd.moveToFirst();
          do {

              duaItems.add(new DuaItem(isTopV, cd.getString(1), isImgV, cd.getString(2), isAudV, cd.getString(3),isTransV, cd.getString(4), isTranslitV, cd.getString(5)));

          } while (cd.moveToNext());

    }

the adapter class[the main part]

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.list_item_dua, null);
        }

        TextView textViewTop = (TextView) convertView.findViewById(R.id.textViewTop);
        ImageView imageViewDua = (ImageView) convertView.findViewById(R.id.imageViewDua);
        final Button btnPP = (Button) convertView.findViewById(R.id.playpause);
        TextView txtViewTranslation = (TextView) convertView.findViewById(R.id.txtViewTranslation);
        TextView txtViewTransliteration = (TextView) convertView.findViewById(R.id.txtViewTransliteration);

        textViewTop.setText(Html.fromHtml(duaItems.get(position).getTop()));


        int resId = context.getResources().getIdentifier(duaItems.get(position).getImage(), "drawable", context.getPackageName());
        imageViewDua.setImageResource(resId);

        txtViewTranslation.setText(t1);

        txtViewTransliteration.setText(t2);

        final int audId = context.getResources().getIdentifier(duaItems.get(position).getAudio(), "raw",context.getPackageName());
        btnPP.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    if(mPlayer.isPlaying()) {
                        mPlayer.reset(); btnPP.setText("c");
                        } else {
                        mPlayer.release(); mPlayer = MediaPlayer.create(context, audId);
                        //try { mPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
                        mPlayer.start(); btnPP.setText("a");
                        mPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) {
                            mPlayer.reset(); mPlayer.release(); btnPP.setText("c");}
                        });
                    } 

                }
            });



        return convertView;
    }

}

解决方案

Out of Memory (OOM) Error

Out of memory error is very common error when you are developing for a application that deals with multiple images sets or large bitmaps or some Animation stuff. In this case we have to be very careful and efficient while handling the images or object allocation and deallocation. OOM error comes when the allocation crosses the heap limit or your process demand a amount of memory that crosses the heap limit.

In Android, every application runs in a Linux Process. Each Linux Process has a Virtual Machine (Dalvik Virtual Machine) running inside it. There is a limit on the memory a process can demand and it is different for different devices and also differs for phones and tablets. When some process demands a higher memory than its limit it causes a error i.e Out of memory error.

Possible Reasons:

There are number of reasons why we get a Out of memory errors. Some of those are:

  1. You are doing some operation that continuously demands a lot of memory and at some point it goes beyond the max heap memory limit of a process.

  2. You are leaking some memory i.e you didn’t make the previous objects you allocated eligible for Garbage Collection (GC). This is called Memory leak.

  3. You are dealing with large bitmaps and loading all of them at run time. You have to deal very carefully with large bitmaps by loading the size that you need not the whole bitmap at once and then do scaling.

The biggest reason for Out of memory is a Memory leak.

Read here for more.

If You are loading heavy images, from Resource OOM will occur. here is the best way to load heavy images from the resource folder. Please go through it.

这篇关于崩溃报告 - 它说什么,如何解决?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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