Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;OutOfMemoryError“;调用onClick时(崩溃报告)_Java_Onclick_Crash_Out Of Memory_Developer Console - Fatal编程技术网

Java &引用;OutOfMemoryError“;调用onClick时(崩溃报告)

Java &引用;OutOfMemoryError“;调用onClick时(崩溃报告),java,onclick,crash,out-of-memory,developer-console,Java,Onclick,Crash,Out Of Memory,Developer Console,我的应用程序收到很多崩溃报告 调用onClickListener时,应用程序崩溃。 只有Android版本7.0和7.1受到影响。 我已经尝试在Android版本7的模拟器上启动该应用程序,但在模拟器上一切正常 以下是坠机报告: java.lang.OutOfMemoryError: at dalvik.system.VMRuntime.newNonMovableArray (Native Method) at android.graphics.BitmapFactory.nativeD

我的应用程序收到很多崩溃报告

调用onClickListener时,应用程序崩溃。 只有Android版本7.0和7.1受到影响。 我已经尝试在Android版本7的模拟器上启动该应用程序,但在模拟器上一切正常

以下是坠机报告:

java.lang.OutOfMemoryError:
  at dalvik.system.VMRuntime.newNonMovableArray (Native Method)
  at android.graphics.BitmapFactory.nativeDecodeAsset (Native Method)
  at android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:655)
  at android.graphics.BitmapFactory.decodeResourceStream             (BitmapFactory.java:483)
  at android.graphics.drawable.Drawable.createFromResourceStream (Drawable.java:1157)
  at android.content.res.ResourcesImpl.loadDrawableForCookie (ResourcesImpl.java:720)
  at android.content.res.ResourcesImpl.loadDrawable (ResourcesImpl.java:571)
  at android.content.res.Resources.getDrawable (Resources.java:889)
  at android.content.Context.getDrawable (Context.java:530)
  at android.support.v4.content.ContextCompat.getDrawable (ContextCompat.java:351)
  at android.support.v7.widget.AppCompatDrawableManager.getDrawable (AppCompatDrawableManager.java:200)
  at android.support.v7.widget.AppCompatDrawableManager.getDrawable (AppCompatDrawableManager.java:188)
  at android.support.v7.content.res.AppCompatResources.getDrawable (AppCompatResources.java:100)
  at android.support.v7.widget.AppCompatImageHelper.setImageResource (AppCompatImageHelper.java:85)
  at android.support.v7.widget.AppCompatImageView.setImageResource (AppCompatImageView.java:94)
  at com.future.king.johncena.tabs.Tab1$1.onClick (Tab1.java:94)
  at android.view.View.performClick (View.java:5675)
  at android.view.View$PerformClick.run (View.java:22641)
  at android.os.Handler.handleCallback (Handler.java:836)
  at android.os.Handler.dispatchMessage (Handler.java:103)
  at android.os.Looper.loop (Looper.java:203)
  at android.app.ActivityThread.main (ActivityThread.java:6251)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1063)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:924)    
这是我的听众:

public void button() {
  button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {
      cleanUpMediaPlayer();
      mp = MediaPlayer.create(getActivity(), R.raw.sound);

      mp.start();
      if(!sound1){
        mp.setVolume(0.0f, 0.0f);
      }

      button.setImageResource(R.drawable.button1);
      mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
          button.setImageResource(R.drawable.button);
        }
      });
    }
  });
}
第94行是

button.setImageResource(R.drawable.button1);

我希望有人能告诉我是什么导致了这次崩溃。

我强烈建议对
按钮使用
选择器
状态可绘制项
并更改按钮状态,而不是在
onClick
方法中设置图像资源


请参阅以供参考。

图像有多大?如果您尝试在onClickListener之外调用
setImageResource
,您会得到同样的结果吗?@S.L.Barth图像是512x512。问题是,在我的Android 7版模拟器上,一切正常,这意味着我必须上传它,等待用户发送崩溃报告。好的,谢谢,你知道我如何测试它吗?与其更新应用程序,等待用户崩溃报告,我有一个理论,这个OOM是一个按钮垃圾邮件点击的结果,因为你没有在代码中阻止它。尝试重复发送垃圾邮件,这可能是原因。无论哪种方式,设置按钮
setClickable(false)当用户第一次单击它并在声音播放后使其再次可单击时。是,这可能会导致崩溃。我是否可能将所有内容都放在onClick方法中进行尝试捕获?所以应用程序不会崩溃?
try{}catch{}
并不是问题的解决方案。总之,捕获OOMException不是一个好主意()问题是应该允许用户对按钮发送垃圾邮件。