【问题标题】:Stack overflow exception when moving between fragment very quickly在片段之间快速移动时出现堆栈溢出异常
【发布时间】:2015-07-22 12:31:07
【问题描述】:

当我在片段之间快速切换时,我得到了以下堆栈跟踪(片段事务不添加到后台堆栈)。 (每秒 5 个片段)。知道为什么会这样吗?

java.lang.StackOverflowError
        at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:472)
        at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:461)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onPreparePanel(AppCompatDelegateImplBase.java:294)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:541)
        at android.support.v7.internal.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:89)
        at android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(Too

【问题讨论】:

  • 你有解决这个问题的办法吗?

标签: android android-fragments fragmentmanager


【解决方案1】:

当您的应用程序进入无限循环时会发生 StackOverflowError。在您的输出中,我们可以看到 onPreparePanel 在捕获错误之前被调用了很多次。

尝试检查onPreparePanel 可能出现的问题以及可能触发它的原因,使其开始循环。

【讨论】:

  • 感谢您的回答。 onPreparePanel 是 android 支持库的一部分,我的应用程序中没有任何特定的覆盖。并且没有用于移动到不同片段的循环。当我非常快速地手动更改片段时,我只会收到错误消息。如果我缓慢移动片段,似乎我没有收到错误。
  • 要注意的另一件事是,我正在为我正在创建的每个新片段设置操作栏(使用工具栏)(这是我的应用程序所必需的,因为我希望工具栏移动以及片段之间的过渡)。
  • 对不起,我不习惯使用 ToolBar,但我认为使用每个新片段更新操作栏可能是个问题。不幸的是,我不确定如何解决它。您说它仅在您快速操作片段时才会发生,因此在更新操作栏之前添加一些延迟可能会有所帮助? :-)
猜你喜欢
  • 2010-10-30
  • 2015-07-12
  • 2010-11-27
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多