我该如何解决这个java.outOfMemoryError [英] How do I solve this java.outOfMemoryError

查看:249
本文介绍了我该如何解决这个java.outOfMemoryError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在listactivity滚动,但延迟非常明显然后崩溃,这是我的customadapter code:

I am trying to scroll in a listactivity but it is laggy then crashes, this is my customadapter code:

public class CustomSearch extends ArrayAdapter<SearchFItem> {
    private List<SearchFItem> data;
    Context context;




    private static class ViewHolder {
        ImageView imageView1;
        TextView Name;
    }



    public CustomSearch(Context context, int textViewResourceId,
            List<SearchFItem> data) {
        super(context, textViewResourceId, data);


        this.data = data;
        this.context = context;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        SearchFItem item = data.get(position);
        ViewHolder holder = null;

        View v = convertView;
        if (v == null) {
            v = LayoutInflater.from(getContext()).inflate(
                    R.layout.friends_view, null);
            holder = new ViewHolder();
            holder.imageView1 = (ImageView) v.findViewById(R.id.proView1);
            holder.Name = (TextView) v.findViewById(R.id.nameView1);
        } else {
            holder = new ViewHolder();
            holder.imageView1 = (ImageView) v.findViewById(R.id.proView1);
            holder.Name = (TextView) v.findViewById(R.id.nameView1);
        }
        final byte[] encodeByte = Base64.decode(item.getProfPic(),
                Base64.DEFAULT);

        final Bitmap profpic = BitmapFactory.decodeByteArray(encodeByte, 0,
                encodeByte.length);
        holder.imageView1.setImageBitmap(profpic);
        final String name = item.getName();
        holder.Name.setText(name);

        return v;
    }


}

和这里是我的错误codeS:

and here is my error codes:

04-19 00:16:24.540: E/AndroidRuntime(1709): FATAL EXCEPTION: main
04-19 00:16:24.540: E/AndroidRuntime(1709): Process: com.example.whiteboard, PID: 1709
04-19 00:16:24.540: E/AndroidRuntime(1709): java.lang.OutOfMemoryError
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:500)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:523)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at com.example.whiteboard.CustomSearch.getView(CustomSearch.java:91)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.AbsListView.obtainView(AbsListView.java:2240)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.ListView.makeAndAddView(ListView.java:1790)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.ListView.fillUp(ListView.java:725)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.ListView.fillGap(ListView.java:664)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5136)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3236)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.AbsListView.onTouchMove(AbsListView.java:3580)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.widget.AbsListView.onTouchEvent(AbsListView.java:3424)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.View.dispatchTouchEvent(View.java:7706)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.View.dispatchPointerEvent(View.java:7886)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.os.MessageQueue.nativePollOnce(Native Method)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.os.MessageQueue.next(MessageQueue.java:138)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.os.Looper.loop(Looper.java:123)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at java.lang.reflect.Method.invokeNative(Native Method)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at java.lang.reflect.Method.invoke(Method.java:515)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-19 00:16:24.540: E/AndroidRuntime(1709):     at dalvik.system.NativeStart.main(Native Method)

感谢您的帮助。我一直停留在这个问题上一段时间。但是这是试图加载的配置文件列表。

Thanks for any help. I have been stuck on this problem a while. But this is trying to load a list of profiles.

推荐答案

如果您有高分辨率的图像,你应该扩展他们下来/根据不同的设备加载图像没有遇到内存故障。

If you have high resolution image , you should scale them down for/depending on different devices to load the image without facing a memory problem.

在你的情况,有些手机可能不会出现在第一次运行相同的行为,但最终(这是它越来越laggy的部分),不处理优化图像加载的解决方案,应用程序会崩溃

检查更多的内存问题:

根据负载主题缩小版本到内存中。结果
Android开发者优化位图帮助结果
内存不足错误的Andr​​oid

Topic under Load a Scaled Down Version into Memory.
Android developer optimize bitmaps help
Out of memory error android

在如何避免它们:结果
<一href=\"http://stackoverflow.com/questions/19151719/how-to-avoid-out-of-memory-error-while-using-bitmap-in-android\">how以避免内存不足的错误,而在Android的使用位图

On how to avoid them:
how to avoid out of memory error while using bitmap in android

有关的概述:结果
在博客结果
更多的内存泄漏 - 整体

For an overview:
Best practices listed on a blog
More of memory leaks - overall

在设定的位图你的ImageView的,即:

Before setting a bitmap for your imageview, i.e.:

holder.imageView1.setImageBitmap(profpic);  

得到缩放位图或尝试其他选项,如 inSampleSize REF:inSampleSize ,做检查您的解决方案如何影响图像的质量太结果
<一href=\"http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize\"相对=nofollow>参考:inSampleSize

get a scaled bitmap or try other options like inSampleSizeref: inSampleSize, do check how your solution affects the quality of your image too.
Reference: inSampleSize

这篇关于我该如何解决这个java.outOfMemoryError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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