java - Android 中的应用程序有时会因 java.lang.OutOfMemoryError 崩溃

标签 java android out-of-memory

我制作了一个在屏幕上绘制正方形的应用程序。用户可以移动方 block ,使用他/她的手指(触摸事件)等增加其宽度和高度。用户还可以添加任意数量的方 block 并单独移动它们。

该应用程序在大部分情况下都可以正常工作,但有时会崩溃并给出以下错误

05-09 11:32:49.488: E/AndroidRuntime(24826): FATAL EXCEPTION: main
05-09 11:32:49.488: E/AndroidRuntime(24826): Process: com.example, PID: 24826
05-09 11:32:49.488: E/AndroidRuntime(24826): java.lang.OutOfMemoryError
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.graphics.Bitmap.nativeCreate(Native Method)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.graphics.Bitmap.createBitmap(Bitmap.java:835)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.graphics.Bitmap.createBitmap(Bitmap.java:812)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.graphics.Bitmap.createBitmap(Bitmap.java:779)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.example.Square.isClicked(Square.java:478)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.example.EditBubbleView$2.onTouch(EditBubbleView.java:378)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.View.dispatchTouchEvent(View.java:7731)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2238)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.app.Activity.dispatchTouchEvent(Activity.java:2466)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.View.dispatchPointerEvent(View.java:7916)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4031)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3910)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3460)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3510)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3479)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3586)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3487)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3643)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3460)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3510)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3479)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3487)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3460)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5728)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5659)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5630)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5808)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.os.MessageQueue.nativePollOnce(Native Method)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.os.MessageQueue.next(MessageQueue.java:138)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.os.Looper.loop(Looper.java:123)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at android.app.ActivityThread.main(ActivityThread.java:5102)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at java.lang.reflect.Method.invokeNative(Native Method)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at java.lang.reflect.Method.invoke(Method.java:515)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
05-09 11:32:49.488: E/AndroidRuntime(24826):    at dalvik.system.NativeStart.main(Native Method)

谁能告诉我如何解决这个问题。谢谢:)

最佳答案

这是内存泄漏的情况。首先检查你的代码在这两个

at com.example.Square.isClicked(Square.java:478)05-09 11:32:49.488: E/AndroidRuntime(24826):    
at com.example.EditBubbleView$2.onTouch(EditBubbleView.java:378)

这两个方法是否同时被调用???如果可能的话,将您的代码粘贴到此处,以便我们查看。

关于java - Android 中的应用程序有时会因 java.lang.OutOfMemoryError 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23557765/

相关文章:

android - 如何在Gradle中排除androidx库的所有版本文件?

python-3.x - joblib 转储时出现内存错误

java - 我可以拒绝简单套接字服务器上的 HTTP 请求吗?

java - Bluetoothsocket 影响播放和录制音频的线程

java - 应用程序内的区域设置更改不起作用

android - 在创建位图时抛出 OutOfMemoryError

c# - 如何在 C# 中处理大文件?

java - 使用 Double.parseDouble() 时如何禁用自动转换为指数表达式?

java - 这个 Cypher 查询有什么问题?

java - ArrayList IndexOfBound从firestore数据库获取数据时出现异常,为什么?