繁体   English   中英

无法通过加载jpg文件分配内存-Android Studio Erro

[英]Failed to allocate memory from loading jpg files - Android studio Erro

我的应用程序中有一个功能,可将存储在应用程序内存中的离线图片添加到列表视图中。 如您所见,代码非常简单:

if(FirstTag != null) {
        if (FirstTag.equals("care"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.care));
        else if (FirstTag.equals("holidays"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.holidays));
        else if (FirstTag.equals("Thing Different"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.thinkdifferent2));
        else if (FirstTag.equals("Fun Activities"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.fun));
        else if (FirstTag.equals("מערך חברות")) }

它只是检查json对象中的一个值,然后通过该值将图片放入listview中,当然,有20个值而不是5个,但我不认为我应该包含所有...所有图片都经过压缩,并且当我不加载许多应用程序时,该应用程序不会崩溃。 但是,当我尝试使用列表视图中每个项目的图片启动应用程序时,一切似乎都正常运行,然后当您向下滚动应用程序时滞,在一秒钟后它崩溃并出现以下错误:

9-30 18:35:18.299 7859-7859 / com.example.negev.peulibraryv201 E / AndroidRuntime:致命例外:主进程:com.example.negev.peulibraryv201,PID:7859 java.lang.OutOfMemoryError:无法分配681099532字节分配,其中16777216个空闲字节和261MB直到dalvik.system.VMRuntime.newNonMovableArray(Native Method)的dalvik.system.VMRuntime.newNonMovableArray(Native Method)在android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)处的OO。在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:535)在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1179)在android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:770)在android.content.res.Resources.getDrawable(Resources.java:1640)的android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:621)在android.content.res.Resources.getDrawable(Resources.java:1611)在com.example.negev.peulibraryv201.GamesLibraryAdapter.getView(GamesLibrary android.widget.AbsListView.obtainView(AbsListView.java:3238)的Adapter.java:70)android.widget.ListView.fillDown(ListView.java:767)的android.widget.ListView.makeAndAddView(ListView.java:2147) )在android.widget.ListView.fillGap(ListView.java:731)在android.widget.AbsListView.trackMotionScroll(AbsListView.java:8292)在android.widget.ListView.trackMotionScroll(ListView.java:2065)在android.widget .absListView $ FlingRunnable.run(AbsListView.java:7719)位于android.view.Choreographer $ CallbackRecord.run(Choreographer.java:927)位于android.view.Choreographer.doCallbacks(Choreographer.java:702)位于android.view。 android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:913)在android.os.Handler.handleCallback(Handler.java:751)处的Choreographer.doFrame(Choreographer.java:635)在android.os.Handler.dispatchMessage处(Handler.java:95)在android.os.Looper.loop(Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6682)在java.lang.reflect.Method.invoke(本机 方法)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1520)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

我已经将这些行添加到清单中:

android:hardwareAccelerated="false"
    android:largeHeap="true"

它没有用,您认为我能做到吗? 谢谢!

您应该做的是在屏幕上可见时动态加载数据。 由于这是艰苦的工作,因此Google已经为您做到了。 您需要在列表视图中使用ArrayAdapter,并在需要时让Andriod要求您提供更多数据。 它的代码太多,无法详细解释,但请看此Goolge I / O视频 网络上有许多教程,详细介绍了如何执行此操作。 在这里看看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM