简单的 Android 应用程序 - 在智能手机上运行时出现内存不足错误

2023-12-06

我对 Android Studio 相当陌生,我尝试制作一个简单的应用程序。单击按钮后应出现随机图像。下一个不可能是已经展示过的。

我有两节课。 MainActivity 和 RandomCardDraw。

当我在 AVD 模拟器中运行该应用程序时,它不会崩溃。但有时我会收到“跳过帧”的信息。当我在三星 S6 上运行它时,每次尝试获取第二张图像时,应用程序都会崩溃。在 Android 中,我可以看到内存不足错误。

图片大小在 100-200kb 之间,我大约有 18 张。

也许您可以看到我从哪里得到性能问题?

这是我的代码:

主要活动:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;



public class MainActivity extends AppCompatActivity {

    ImageView cardView;
    Button nextCard;
    RandomCardDraw2 game1 = new RandomCardDraw2();
    int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        game1.createRandomCardList();
        gameStart();


    }

    public void gameStart()
    {
        cardView = (ImageView) findViewById(R.id.cardView);
        nextCard = (Button) findViewById(R.id.nextCard);
        nextCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {

                if (counter < 19)
                {
                    int id = getResources().getIdentifier(game1.drawnCards.get(counter), "drawable", getPackageName());
                    cardView.setImageResource(id);
                    counter++;
                }

            }
        });

    }

}

和随机卡绘制:

 import java.util.ArrayList;
 import java.util.Random;  


public class RandomCardDraw2
{
    ArrayList<String> drawnCards = new ArrayList<>();
    Random rndInt = new Random();

    public void createRandomCardList()
    {
        boolean gameType = true;
        int counter;
        if (gameType == true)
        {
            counter = 19;
            for (int i = 0; i < counter; i++)
            {
                String cardId = "card" + rndInt.nextInt(18 + 1);
                drawnCards.add(cardId);
            }
        }
        else
        {
            counter = 23;
            for (int i = 0; i < counter; i++)
            {
                String cardId = "card" + rndInt.nextInt(18 + 1);
                drawnCards.add(cardId);
            }
        }

    }
}

当应用程序打开时。带有卡片的 ArrayList 是随机填充的。然后,当用户单击该按钮时,下一张卡片就会出现。正如我所说,在我的智能手机上,当我想获取第二张图像时,应用程序崩溃了。

错误代码:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.kajet.shutupanddrink, PID: 18109
              java.lang.OutOfMemoryError: Failed to allocate a 192000012 byte allocation with 16775360 free bytes and 69MB until OOM
                  at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:856)
                  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:675)
                  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:2228)
                  at android.content.res.Resources.loadDrawableForCookie(Resources.java:4215)
                  at android.content.res.Resources.loadDrawable(Resources.java:4089)
                  at android.content.res.Resources.getDrawable(Resources.java:2005)
                  at android.content.res.Resources.getDrawable(Resources.java:1987)
                  at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:133)
                  at android.content.Context.getDrawable(Context.java:464)
                  at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
                  at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
                  at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
                  at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192)
                  at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66)
                  at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71)
                  at com.example.kajet.shutupanddrink.MainActivity$1.onClick(MainActivity.java:41)
                  at android.view.View.performClick(View.java:5702)
                  at android.widget.TextView.performClick(TextView.java:10888)
                  at android.view.View$PerformClick.run(View.java:22541)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:158)
                  at android.app.ActivityThread.main(ActivityThread.java:7229)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

有人可以帮忙吗?

非常感谢!


将这些添加到您的清单中:

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

@你的manifest.xml应该是:

<application
android:allowBackup="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的 Android 应用程序 - 在智能手机上运行时出现内存不足错误 的相关文章

随机推荐

  • 用于突出显示功能的更高效的 JavaScript 代码?

    所以这是我需要清理的功能 我需要创建一个功能 观众可以单击句子中的任何单词 它就会突出显示 然而 我需要做到一次只突出显示一个单词 例如 如果您单击单词 you 然后您改变主意并单击单词 eagle 则单词 you 将被取消选择 它已经有现
  • UseStatusCodePagesWithReExecute 不适用于禁止 (403)

    当我指定 404 作为 http 结果代码时 UseStatusCodePagesWithReExecute正在按预期工作 当我指定 403 作为 http 结果代码时 UseStatusCodePagesWithReExecute没有按预
  • 运行 Java 程序

    我查看了其他一些 SO 问题 没有找到任何可以解决我的问题的内容 我有一个 Main java 文件 如下 和一个 OthelloLib jar 文件 没有关联的源文件 Running javac Main java失败了 Main jav
  • 如何在 ASP.Net Core 6.0 中实现 HSTS 标头?

    我需要在 ASP Net Core 6 0 WEB API 应用程序中实现 HSTS 标头安全性 下面是我的程序 cs var builder WebApplication CreateBuilder args Https redirect
  • Twilio 录制:暂停和恢复

    我相信答案是否定的 但 Twilio 是否提供暂停 恢复录音的功能 用例是对通话进行录音 但在收集敏感信息时暂停录音 从 REST 文档来看 它似乎不是受支持的功能 我认为有人可能已经找到了满足此要求的一些选项 这是可能的 尽管从文档中并不
  • 在 Python 3 中从 utf-16 转换为 utf-8

    我正在使用 Python 3 进行编程 但遇到了一个小问题 我在网上找不到任何关于它的参考 据我了解 默认字符串是 utf 16 但我必须使用 utf 8 我找不到将从默认字符串转换为 utf 8 的命令 我非常感谢你的帮助 在 Pytho
  • 当 springboot 应用程序在 docker 容器上运行时,无法找到 LoginModule 类:org.apache.kafka.common.security.plain.PlainLoginModule

    我有一个 Spring Boot 应用程序使用spring kafka向 kafka 发布消息的依赖 kafka 配置使用标准 kafka properties sasl jaas config 对 kafka 服务器进行身份验证 应用程序
  • 如何从 Newlib 在 GCC 中实现 printf?

    我正在努力使用 GCC 将 printf 从 newlib 正确实现到我的 esp32 中 我已经阅读了 newlib 文档 它为我提供了有关如何调用 printf 的一般信息 但没有向我解释后端实现 根据我当前的研究 我确定 printf
  • Jenkins 基于用户的工作安全

    我在本地计算机上只有一个 jenkins 实例 我们用它来构建代码 我们有不同的项目团队从事不同的项目 每个项目都有不同的工作 为了消除一个团队中的某人意外搞乱另一个团队工作的可能性 我创建了多个 jenkins 用户 但是 所有可以登录的
  • Sqlite 中的 acos 函数

    我有一个关于 SQLite 查询的问题 我需要执行这样的 sqlite 查询 SELECT id 6371 acos cos radians 78 3232 cos radians lat cos radians lng radians 6
  • 在 Android (JAVA) 中的字符串上使用 XPath

    我正在寻找一些在 Android 中使用 xpath 的示例 或者谁能 分享一下他们的经历 我一直在努力解决这个问题的尾部或头部 我有一个包含标准 xml 文件的字符串 我相信我需要将其转换为 xml 文档 我发现这段代码我认为可以解决问题
  • 如何让 2 个 HtmlUnit Web 客户端使用相同的 cookie?

    如果我在不同的线程中创建 2 个 WebClient 如何让它们使用相同的 cookie 您可以使用以下代码 CookieManager cookieManager new CookieManager webClient1 setCooki
  • 无法将 NSTaggedPointerString 类型的值转换为 NSDictionary

    我正在尝试将 Firebase 值分配给我的结构 var productsArray Product 但是我有一个小错误 无法将 NSTaggedPointerString 类型的值转换为 NS字典 我知道我不能直接分配它们 所以这就是我这
  • NOT IN 不会产生与 NOT EXISTS 相同的结果

    这些都是相当基本的陈述 我有一个链接到另一个表中的项目的图形列表 我想检查有多少图形没有使用并且理论上可以删除 所以首先我使用了 NOT IN 子句 SELECT GraphicNr Graphicfile FROM dbo Graphic
  • 对哈希进行排序的最快方法是什么?

    人们经常问什么是best方式对哈希进行排序 但随后他们不会询问所需的后续问题 即什么是fastest方式 这确实决定了最好的方式 无论使用什么版本的 Ruby 在 Ruby 中对哈希进行排序的最快方法是什么 我正在寻找其他答案 以涵盖极端情
  • 从 Android 中 JSONString 中存储的 URL 加载 ImageView 中的图像

    我有一个JSON字符串 说出名称和 Url 我需要将名称提取到TextView并提取并显示图像ImageView 以下是上述场景的代码 public static final String JSON STRING WebImages Ima
  • 使用 VBA 动态创建 HTML 表格行

    我正在使用 VBA 在 Outlook 电子邮件中创建一个表 我已经弄清楚如何生成表 但我的问题是我需要动态调整表中的行数 对于某些电子邮件 将有两行数据 对于其他电子邮件 将有三行 依此类推 在下面的代码中rowstocontact is
  • setWebViewClient 与 setWebChromeClient 有什么区别?

    有什么区别setWebViewClient vs setWebChromeClient在安卓中 来自源代码 Instance of WebViewClient that is the client callback private vola
  • 当我的闪屏启动时出现 java.lang.UnsupportedOperationException

    当我的启动屏幕启动时 我在 logcat 中收到错误 11 06 02 36 45 450 E global 4184 Deprecated Thread methods are not supported 11 06 02 36 45 4
  • 简单的 Android 应用程序 - 在智能手机上运行时出现内存不足错误

    我对 Android Studio 相当陌生 我尝试制作一个简单的应用程序 单击按钮后应出现随机图像 下一个不可能是已经展示过的 我有两节课 MainActivity 和 RandomCardDraw 当我在 AVD 模拟器中运行该应用程序