简体   繁体   English

StackOverflowError:Android 8.1 ProgressBar上的堆栈大小为8MB

[英]StackOverflowError: stack size 8MB on Android 8.1 of ProgressBar

One user upgraded her device to Android 8.1, my app doesn't start after upgrade. 一位用户将设备升级到Android 8.1,升级后我的应用无法启动。 I found an exception for her device model and Android version. 我发现她的设备型号和Android版本存在例外。 Pleas help to understand why does this exception occur on Android 8.1 on some devices. 恳求有助于理解为什么在某些设备上的Android 8.1上会发生此异常。 I tried emulator on Android 8.1 - no problem. 我在Android 8.1上尝试了模拟器-没问题。 Details below: 详情如下:

Fatal Exception: java.lang.StackOverflowError: stack size 8MB
       at android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:1294)
       at android.widget.ProgressBar.refreshProgress(ProgressBar.java:1353)
       at android.widget.ProgressBar.setProgressInternal(ProgressBar.java:1418)
       at android.widget.ProgressBar.setProgress(ProgressBar.java:1385)
       at com.app.my.BarControllerView.updateCurrentSoundValue(Unknown Source:9)
       at com.app.my.BarControllerView.makeControllerView(Unknown Source:25)
       at com.app.my.BarControllerView.onProgressChanged(Unknown Source:10)

BarController's some code (appears as popup on top of video surface) below. 下面的BarController的一些代码(显示在视频表面的顶部)。 I suppose problem is here with loop of showing BarControllerView and updating level of ProgressBar. 我想问题在于显示BarControllerView和ProgressBar的更新级别的循环。

private void initControllerView(View v) {

        int volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

        seekbar = (SeekBar) v.findViewById(R.id.seekBar);
        seekbar.setOnSeekBarChangeListener(this);
        seekbar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));

        seekbar.setProgress(volume);
    }

public void updateCurrentSoundValue() {

        seekbar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));

    }



@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                try {
                    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                }
                catch (Exception e) {
                    Toast.makeText(mContext, "Error)", Toast.LENGTH_SHORT).show();
                }
                show(sDefaultTimeout);
            }

public void show(int timeout) {
        if (!mShowing && mAnchor != null) {

            FrameLayout.LayoutParams tlp = new FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    Gravity.RIGHT | Gravity.TOP
            );

            mAnchor.addView(this, tlp);
            mShowing = true;
        }
        updateCurrentSoundValue();

        Message msg = mHandler.obtainMessage(FADE_OUT);
        if (timeout != 0) {
            mHandler.removeMessages(FADE_OUT);
            mHandler.sendMessageDelayed(msg, timeout);
        }
    }
     @Override
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            try {
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
            }
            catch (Exception e) {
                 Toast.makeText(mContext, "Error)", Toast.LENGTH_SHORT).show();
            }

            show(sDefaultTimeout, fromUser);
      }

public void show(int timeout, boolean fromUser) {
        if (!mShowing && mAnchor != null) {

            FrameLayout.LayoutParams tlp = new FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    Gravity.RIGHT | Gravity.TOP
            );

            mAnchor.addView(this, tlp);
            mShowing = true;
        }
        if(fromUser)// prevent infinitive recursive
             updateCurrentSoundValue();

        Message msg = mHandler.obtainMessage(FADE_OUT);
        if (timeout != 0) {
            mHandler.removeMessages(FADE_OUT);
            mHandler.sendMessageDelayed(msg, timeout);
        }
 }

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

相关问题 stack = java.lang.StackOverflowError:堆栈大小8MB - stack=java.lang.StackOverflowError: stack size 8MB 错误java.lang.StackOverflowError:堆栈大小8MB - Error java.lang.StackOverflowError: stack size 8MB Android Firebase java.lang.StackOverflowError:用户上传图像时堆栈大小 8MB 错误 - Android Firebase java.lang.StackOverflowError: stack size 8MB error when user is uploading an image java.lang.StackOverflowError:android studio上的堆栈大小为8MB。 怎么解决? - java.lang.StackOverflowError: stack size 8MB on android studio. How to solve it? Android Firebase实时异常java.lang.StackOverflowError:堆栈大小8MB - Android Firebase Realtime Exception java.lang.StackOverflowError: stack size 8MB java.lang.StackOverflowError:视图中的堆栈大小为8MB - java.lang.StackOverflowError: stack size 8MB in Views java.lang.StackOverflowError:堆栈大小8MB - java.lang.StackOverflowError: stack size 8MB 值动画制作器中的循环会导致java.lang.StackOverflowError崩溃:堆栈大小8MB - Loop in value animator cause in crash with java.lang.StackOverflowError: stack size 8MB 画画布时出现java.lang.StackOverflowError:堆栈大小8MB - I get java.lang.StackOverflowError: stack size 8MB when i draw my canvas 称为递归onResume活动java.lang.StackOverflowError的方法:堆栈大小8MB - Method called recursive onResume Activity java.lang.StackOverflowError: stack size 8MB
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM