繁体   English   中英

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

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

一位用户将设备升级到Android 8.1,升级后我的应用无法启动。 我发现她的设备型号和Android版本存在例外。 恳求有助于理解为什么在某些设备上的Android 8.1上会发生此异常。 我在Android 8.1上尝试了模拟器-没问题。 详情如下:

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的一些代码(显示在视频表面的顶部)。 我想问题在于显示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.

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